python 类和对象的属性

python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象。

1. 父类的对象属性会被子类的对象继承。

2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性,父类和子类的类属性都会被改变。

3. 子类继承父类的类属性可以通过类名+属性名使用,但是一旦发生赋值,就会新定义一个相同名字的子类自己的类属性。

4. 类的对象可以通过对象名+属性名使用类属性,但是一旦发生赋值,就会新定义一个相同名字的对象属性,而且不会被继承。

eg:

>>> class A(object):
... value = 1 #类属性
... def __init__(self):
... self.value2 = 2 # 对象属性
...
>>> a = A()
>>> print a.__dict__
{'value2': 2}
>>> print A.__dict__
{'__module__': '__main__', 'value': 1, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None, '__init__': <function __init__ at 0x10fcd1de8>}
>>> a.value = 2 #新定义了的对象属性,不再是A的类属性
>>> A.value
1
>>> print a.__dict__
{'value2': 2, 'value': 2} >>> class B(A):
... value_B = 3
...
>>> b = B()
>>> print b.__dict__
{'value2': 2}
>>> print B.__dict__
{'__module__': '__main__', '__doc__': None, 'value_B': 3}
>>> B.value
1
>>> B.value = 5 #新定义了B的类属性,不再是继承自A的类属性。
>>> A.value
1
>>> print B.__dict__
{'__module__': '__main__', '__doc__': None, 'value': 5, 'value_B': 3}
>>>

注意:Python中的属性是分层定义的,当我们需要调用某个属性的时候,Python会一层层向上遍历,直到找到那个属性。(某个属性可能出现再不同的层被重复定义,Python向上的过程中,会选取先遇到的那一个,也就是比较低层的属性定义)。

上一篇:python类与对象各个算数运算魔法方法总结


下一篇:vivado第一天从建立文件运行小程序开始