python类的实例属性_Python类属性,实例属性

转自dreamfor的博客:http://www.cnblogs.com/dream-for/p/5199308.html

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

#一段很简单的代码,但反应了很多

>>> class A():

a=1

#一个类里面有个属性a

>>> a=A()

>>> b=A()

>>> a.a

>>> b.a

>>> A.a

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

>>> 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__()方法里的变量就是实例属性,这些属性只有被创建时才会被创建(说实话这句话我没看懂啥意思,是因为python是动态语言的缘故?哪位能给我讲下:) )。

>>> 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__': }

#注意看实例和类属性的区别,类有类属性,但没有实例属性,实例有实例属性,但没有类属性,那我们可能会疑惑为什么我们可以通过实例访问类属性(就像上面的一样)

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值