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

  • 相关阅读:
    Vue $emit()不触发方法的原因
    java 定时任务之一 @Scheduled注解(第一种方法)
    Dubbo的使用及原理浅析.
    Android App 安全的HTTPS 通信
    详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)
    IDEA 2018集成MyBatis Generator 插件 详解
    自建证书配置HTTPS服务器
    Jsoup(一)Jsoup详解(官方)
    Android使用最小宽度限定符时最小宽度的计算
    可显示行号的log工具
  • 原文地址:https://www.cnblogs.com/chybot/p/4769446.html
Copyright © 2011-2022 走看看