-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 回答