zoukankan      html  css  js  c++  java
  • 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向上的过程中,会选取先遇到的那一个,也就是比较低层的属性定义)。

  • 相关阅读:
    Discuz热搜在哪里设置?
    Discuz如何设置帖子隐藏回复可见或部分可见方法
    新版Discuz!应用中心接入教程(转)
    Diszuz管理面版被锁怎么办?
    vs 2019 调试无法查看变量
    Google Docs 的格式刷快捷键
    chrome 的常用快捷键
    Activiti 数据库表结构
    activiti 报 next dbid
    尚硅谷Java基础_Day2
  • 原文地址:https://www.cnblogs.com/chybot/p/4769446.html
Copyright © 2011-2022 走看看