gpt4 book ai didi

python - python 中的类字段是否继承?

转载 作者:行者123 更新时间:2023-11-30 23:23:18 24 4
gpt4 key购买 nike

class A:
a = 3
def f(self):
print self.a

class C(A):
def __init__(self):
self.a = 4

>>> a=A()
>>> a.f()
3
>>> c = C()
>>> a.f()
3
>>> c.f()
4

//更新:

>>> C.a = 5
>>> A.a
3
>>> c.a
4

如何解释结果。

看起来 C 和 A 有 a 的不同副本。在 C++ 中,静态成员应与其派生类共享。

最佳答案

马丁·科尼尼的 answer大部分是正确的。有类级属性(类似于静态成员)和实例级属性。所有实例共享它们的类属性(但不共享它们的实例属性),并且它们可以动态更改。有点令人困惑的是,您可以使用点符号从实例获取类属性,除非实例属性使用相同的名称定义。也许这些例子很能说明问题:

 >>> class A:
... a = 3
... def f(self):
... print self.a
...
>>> class C(A):
... def __init__(self):
... self.a = 4
...
>>> a = A()
>>>
>>> A.a # class-level attribute
3
>>> a.a # not redefined, still class-level attribute
3
>>> A.a = 5 # redefine the class-level attr
>>> A.a # verify value is changed
5
>>> a.a # verify instance reflects change
5
>>> a.a = 6 # create instance-level attr
>>> A.a # verify class-level attr is unchanged
5
>>> a.a # verify instance-level attr is as defined
6
>>> a.__class__.a # you can still get the class-level attr
5
>>>
>>> c1 = C()
>>> c2 = C()
>>> C.a # this changed when we did A.a = 5, since it's inherited
5
>>> c1.a # but the instance-level attr is still there
4
>>> c2.a # for both instances
4
>>> c1.a = 7 # but if we change one instance
>>> c1.a # (verify it is set)
7
>>> c2.a # the other instance is not changed
4

关于python - python 中的类字段是否继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24050479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com