以下代码是一个示例:
class A(object):
def f(self):
pass
A.f.b = 42
如何分配此变量?如果我声明A.f.a,A.f.b和A.f.c变量我是否创建了3个不同的A对象?有人可以解释内存中发生了什么(因为这似乎不是在C中容易编码的东西)吗?
答案 0 :(得分:0)
A.b = 42
将一个类变量添加到A
,从而使A
的每个实例立即可见(但内存中只有一个条目)
您可以随时在Python中为类和实例添加属性。最干净的方法是做宣告时间,否则这可能会产生误导。
class A:
b = 12
但是对于快速"扩展"您可以选择动态添加它们的类或实例。
例如:
class A(object):
pass
a = A()
print('b' in dir(a)) # False
A.b = 42
print('b' in dir(a)) # True even if instanciated before creation of `b`
答案 1 :(得分:0)
以下仅适用于Python 3:
class A(object):
def f(self):
pass
A.f.a = 41
A.f.b = 42
A.f.c = 43
A.f
是function
类型的对象,您始终可以向function
对象添加新属性。没有创建A
个实例;这三个属性是从函数f
本身引用的。
但是,如果您有两个实例a1 = A()
和a2 = A()
,则a1.f.b
和a2.f.b
都未定义,因为a1.f
不是A.f
的引用1}};它是对method
类型的对象的引用。这是因为Python的描述符协议如何用于实现实例方法。