2024-06-11 14:46:49 发布
网友
>>> class Test(object): ... test = {} ... >>> class Test2(Test): ... pass ... >>> Test2.test.update({1:2}) >>> Test.test {1: 2} >>>
我在等{}。旧式类也会发生这种情况。你知道吗
Test2.test.update({1:2})
这将更新Test2继承的基类Test属性。你知道吗
如果你想让他们每个人都有自己的口述,那么:
>>> class Test(object): ... test = {} ... >>> class Test2(Test): ... test = {} ... >>> Test2.test.update({1:2}) >>> Test.test {} >>>
Python有一个我非常喜欢的特性:数据继承,这是您刚刚在实际操作中看到的。你知道吗
您需要使用2个下划线来激活类/属性mung
>>> class Test(object): ... __test = {} ... >>> class Test2(Test): ... pass ... >>> Test2.__test.update({1:2}) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: type object 'Test2' has no attribute '__test'
由于属性munging,可以在Test2._Test__test找到该属性
Test2._Test__test
如果希望所有子类都自动获得它们自己的__test属性,那么可以为Test使用元类
__test
Test
update的工作方式并不奇怪。关键是test是class attribute,类属性在类之间共享(直到有人将test重新绑定到其他对象)。你知道吗
update
test
看看这个IDE会话:
>>> class Test(object): ... test = {} ... >>> class Test2(Test): ... pass ... >>> id(Test.test) 32424144 >>> id(Test2.test) 32424144 >>> Test.test.update({1:2}) >>> Test2.test {1: 2} >>> Test2.test = {} >>> id(Test2.test) 32424480 >>> Test.test {1: 2} >>> Test2.test {} >>> del Test2.test >>> Test2.test {1: 2}
有关类属性如何工作的更多信息,请查看类下的Data Model Reference。你知道吗
这将更新Test2继承的基类Test属性。你知道吗
如果你想让他们每个人都有自己的口述,那么:
Python有一个我非常喜欢的特性:数据继承,这是您刚刚在实际操作中看到的。你知道吗
您需要使用2个下划线来激活类/属性mung
由于属性munging,可以在
Test2._Test__test
找到该属性如果希望所有子类都自动获得它们自己的
__test
属性,那么可以为Test
使用元类update
的工作方式并不奇怪。关键是test
是class attribute,类属性在类之间共享(直到有人将test
重新绑定到其他对象)。你知道吗看看这个IDE会话:
有关类属性如何工作的更多信息,请查看类下的Data Model Reference。你知道吗
相关问题 更多 >
编程相关推荐