定义类时,Python会立即执行定义中的代码。请注意,这与定义Python编译代码但不执行代码的函数不同。你知道吗
这就是为什么会产生错误:class MyClass(object):
a = 1 / 0
但这不会:def my_func():
a = 1 / 0
在A类定义的主体中,A尚未定义,因此在定义之后才能引用它。你知道吗
有几种方法可以实现您的要求,但我不清楚为什么这在第一时间是有用的,所以如果您可以提供关于您的用例的更多详细信息,那么建议走哪条路就更容易了。你知道吗
最简单的就是khelwood发布的内容:class A(object):
pass
A.static_attribute = A()
因为这是修改类创建,所以使用元类可能是合适的:class MetaA(type):
def __new__(mcs, name, bases, attrs):
cls = super(MetaA, mcs).__new__(mcs, name, bases, attrs)
cls.static_attribute = cls()
return cls
class A(object):
__metaclass__ = MetaA
或者您可以使用描述符来延迟创建实例,或者如果您想进一步自定义对实例的访问:class MyDescriptor(object):
def __get__(self, instance, owner):
owner.static_attribute = owner()
return owner.static_attribute
class A(object):
static_attribute = MyDescriptor()