• Python类属性,实例属性


    1.Python类数据属性:定义在类里面但在函数外面的变量,它们都是静态的。

    #一段很简单的代码,但反应了很多
    >>> class A():
        a=1
    #一个类里面有个属性a
        
    >>> a=A()
    >>> b=A()
    >>> a.a
    1
    >>> b.a
    1
    >>> A.a
    1
    #这个属性能被实例和类访问
    >>> a.a=2
    >>> b.a
    1
    >>> A.a
    1
    #改变实例a的属性a,实例b和类的a并没有改变
    >>> A.a=2
    >>> b.a
    2
    #改变类的属性,实例的属性随着改变,这就好像遗传一样,一个物种分化为两个不同的物种A,B,随便A物种怎么变,对B不会产生影响,但如果穿越时空,改变了它们祖先的一些特点,那么,A,B都会随着改变

    >>> dir(A)

    ['__doc__', '__module__', 'a']

    默认产生的属性

    C.__name__ 类C的名字(字符串)
    C.__doc__ 类C的文档字符串
    C.__bases__ 类C的所有父类构成的元组
    C.__dict__ 类C的属性
    C.__module__ 类C定义所在的模块(1.5 版本新增)
    C.__class__ 实例C对应的类(仅新式类中)

    
    

    >>> A.__module__
    '__main__'

    Python支持模块间的类继承,也就是说你在文件中定义的类都是这个模块的子类,那么通过from module import class就可以将一个类引入另一个文件,反之也可以定位类的位置

    2.Python类实例属性

    定义在__init__()方法里的变量就是实例属性,这些属性只有被创建时才会被创建。

    >>> class Test():
        classVar=2
        def __init__(self):
            self.instanceVar=3
    #提醒一下这里要写self.否则就是个局部变量了,还有__init__没有返回值
            
    >>> atest=Test()
    >>> btest=Test()
    >>> atest.__dict__
    {'instanceVar': 3}
    >>> Test.__dict__
    {'__module__': '__main__', 'classVar': 2, '__doc__': None, '__init__': <function __init__ at 0x01E68930>}
    #注意看实例和类属性的区别,类有类属性,但没有实例属性,实例有实例属性,但没有类属性,那我们可能会疑惑为什么我们可以通过实例访问类属性(就像上面的一样)
    #在类实例中查找属性的时候,首先在实例自己的作用域中查找,如果没有找到,则再在类定义的作用域中查找。在对类实例属性进行赋值的时候,实际上会在类实例定义的作用域中添加一个属性(如果还不存在的话),并不会影响到相应类中定义的同名属性。

    参见http://www.cnblogs.com/frydsh/p/3194710.html

    3.当类属性与实例属性同名时,一个实例访问这个属性时实例属性会覆盖类属性,但类访问时不会。具体还有很多可以看看Python核心编程13章

  • 相关阅读:
    设置密码等级判断
    密码验证包含数字字母字符的两个或两个以上的组合
    解决ps不能直接把文件拖进去的问题
    图片上传js
    关于手机ios和安卓和pc的点击事件的兼容
    css设置两行多余文字用..显示
    对于奇数和偶数的轮播
    手机端开发的问题(摘要)
    懒加载
    Django admin 后台 数据展示
  • 原文地址:https://www.cnblogs.com/dream-for/p/5199308.html
Copyright © 2020-2023  润新知