如何在类创建时使用self.method()?

时间:2013-01-09 08:01:34

标签: python

在某些情况下,我想在类创建时使用实例方法。

我只想在权限列表中使用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

2 个答案:

答案 0 :(得分:2)

看起来您将attribute这个词与property混淆了;你不能在类定义本身中使用self,它只能用于方法。

我认为您正在寻找property descriptor

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

答案 1 :(得分: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