类属性和实例属性 Python从入门到放弃

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

#一段很简单的代码,但反应了不少函数

>>> class A():性能

    a=1spa

#一个类里面有个属性a继承

    

>>> a=A()作用域

>>> b=A()文档

>>> a.a字符串

>>> b.ait

>>> A.aio

#这个属性能被实例和类访问function

>>> a.a=2

>>> b.a

>>> A.a

#改变实例a的属性a,实例b和类的a并无改变

>>> A.a=2

>>> b.a

#改变类的属性,实例的属性随着改变,这就好像遗传同样,一个物种分化为两个不一样的物种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>}

#注意看实例和类属性的区别,类有类属性,但没有实例属性,实例有实例属性,但没有类属性,那咱们可能会疑惑为何咱们能够经过实例访问类属性(就像上面的同样)

#在类实例中查找属性的时候,首先在实例本身的做用域中查找,若是没有找到,则再在类定义的做用域中查找。在对类实例属性进行赋值的时候,实际上会在类实例定义的做用域中添加一个属性(若是还不存在的话),并不会影响到相应类中定义的同名属性。

当类属性与实例属性同名时,一个实例访问这个属性时实例属性会覆盖类属性,但类访问时不会。

相关文章
相关标签/搜索