-1

場合によっては、クラス作成時にインスタンス メソッドを使用したいことがあります。

アクセス許可リストで self を使用したいだけです..これは私の質問です

しかし、うまくいきません。問題を解決する方法はありますか?

class PermissionChecker(object):
    # how to use self in class create time.
    permissions = [self.is_superuser(), self.is_god()]

    def is_superuser(self):
        # use self.property just like self.name...
        return True

    def is_god(self):
        return True

class Child(PermissionChecker):
    permissions = PermissionChecker.permissions + [self.is_coder(),]

    def is_coder(self):
        return True
4

2 に答える 2

2

用語attributeproperty;と混同しているようです。クラス定義自体では使用できませんself。メソッドでのみ使用できます。

property私はあなたが記述子を探していると思います:

class PermissionChecker(object):
    @property
    def permissions(self):
        return [self.is_superuser(), self.is_god()]

    def is_superuser(self):
        # use self.property just like self.name...
        return True

    def is_god(self):
        return True

property(上記でデコレータとして使用された)を使用することにより@、メソッドを属性に変換します。

>>> pcheck = PermissionChecker()
>>> pcheck.permissions
[True, True]

このメソッドは、インスタンスで属性にアクセスするpermissionsたびに呼び出されます。.permissions

__init__または、イニシャライザでリストを設定します。

class PermissionChecker(object):
    def __init__(self):
        self.permissions = [self.is_superuser(), self.is_god()]

    def is_superuser(self):
        # use self.property just like self.name...
        return True

    def is_god(self):
        return True
于 2013-01-09T08:05:29.753 に答える
0

プロパティを提供しようとしているようです。これは次のように行うことができます。

class PermissionChecker(object):
    def _get_permissions(self):
        return [self.is_superuser(), self.is_god()]

    permissions = property(_get_permissions)

    def is_superuser(self):
        # use self.property just like self.name...
        return True

    def is_god(self):
        return True
于 2013-01-09T08:05:40.410 に答える