python中的类属性、实例属性以及方法函数中的self的意义

在学习Python的面向对象过程中,我对self并不理解,今天在翻阅《Python学习手册(第三版)》以及结合学习PyQt4(因为其中有大量的类)的过程中,对类属性,实例属性以及self的作用有了一个基本的理解。


>>> class Test():
...     name = 'LinuxerRocky'
...     def __init__(self,value):
...             self.data = value
...     def display(self):
...             print self.data
...

上面的code是在解释器中写的,在这里,我定义了一个名字叫做Test的类。在这个类的代码中,name为类属性,下面两个函数也为类属性。什么是类属性?可以观察到,我们在class代码区域中,对于赋值的变量名,比如name,这些就是类的属性(类属性通常是在class代码区中的顶层赋值语句产生的);当然,我们也可以在class代码区意外创建类属性。其中

再看self.data = value,这里的data属性属于实例属性。那么我们如何创建实例属性呢?实例属性是通过实例对象赋值属性来创建的,正如《Python学习手册(第三版)》所描述:实例属性一般是在class语句中的类方法对self参数赋值属性来创建的。不过,你也可以在任何地方引用实例通过赋值语句来创建属性,即使是在class语句之外。一般来说,实例属性都是在__init__构造器中初始化。


下面我们对上面的Test类进行实例:

>>> c1 = Test('LinuxerRocky')    #创建一个Test类的实例c1
>>> c1.data                      #实例对象c1访问它的data属性
'LinuxerRocky'
>>> c1.display()
LinuxerRocky
>>> c1.age = 21                  #为实例c1增加一个实例属性,命名为age,赋值为21
>>> 
>>> c2 = Test('Bob')             #创建实例c2
# >>> c2.data
'Bob'
>>> c2.age
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Test instance has no attribute 'age'

上面语句基本都有注解,那么我们看c2.age以及下面的报错信息:我们有c1.age=21这条语句,然后使用c2实例访问age这个属性,但是发生了报错信息,提示为实例没有age这个属性。为什么呢?因为age这个属性只属于c1,而不属于c2。所以我们上面就有这样一句话:你也可以在任何地方引用实例通过赋值语句来创建属性,即使是在class语句之外。但是我们发现,可以用c1和c2访问name属性而不会报错,这是因为name属性是一个类属性,类属性对于所有实例来说,他都是共享的!

self的意义:在类中的方法里面,我们将self作为第一个参数,然后python会自动填入实例对象-----即调用方法的实例或者主体。其实,重要的不是self,而是self所在的位置,self可以被a,b,c等任何字符代替!     通过上面的例子我们可以发现,self简单的来说,他就是代表一个实例(不知道这样理解对不对)

最后,再看__init__这个特殊的方法,他是一个构造器。这个构造器的特殊之处就在于我们在对类进行实例化时,这个函数就会被执行,会创建设定的属性或实现其他的功能,这样做的好处就是进行数据的初始化。

方法函数的特殊参数self和__init__构造器是python中面向对象的基石

补充:self与self.

self. data   可以给实例对象属性赋值或者是用来访问某实例属性

self 代表实例对象本身;

注意:此文是我在初学时的小总结,可能会有不恰当的地方,因此此文会随着自身知识的完善而不断更新



转载于:https://my.oschina.net/yanxiaoshuai/blog/529020

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值