什么是类和对象?
python中,一切皆为对象,比如人就是一个对象,汽车、房子都是对象。
每一个对象都有自己的属性,比如人这个对象的属性有性别、身高、年龄等等
房子的属性有房价、面积、户型等等
在python中,一个对象的特征也称为属性(attribute)。它所具有的行为也称为方法(method)
所以:对象=属性+方法
在python中,我们把具有相同属性和方法的对象归为一个类(class)
比如:人、动物、植物、建筑等等
类是对象的模板和蓝图,对象是类的实例化。类不代表具体的事物,而对象表示具体的事物。
注意:属性为对象所有,类不具有对象的属性!!!
初始化对象:
创建类时,可以定义一个特定的方法为__init__()。只要创建类的实例,就会运行该方法。可以向
__init__()方法传递参数,这样可以在实例化对象时,把属性设置为你希望的值
例如:
person: memo = (,name,age): .Name=name .Age=age p1=person(,) p1.Age,p1.Name person.memo
输出结果
50 laowang
众多物种之一
什么是静态字段和动态字段?
上面的self是什么?Name、Age是什么?name、age又是什么?
self是创建对象的值,也就是说它表示对象本身,在上面的例子中self就是p1,而Name、Age是对象的属性,这种属于对象的字段叫做动态字段。name、age是创建对象时需要传递的参数。
上面的例子中memo是什么?它属于类还是某一个对象?
memo属于类,这种属于类的字段通常被称为静态字段。self.xx才是属于对象的
属于类的字段,静态字段使用类名.字段名来访问,例如上例中 person.memo
动态字段使用对象名.字段名,例如上例中p1.Name、p1.Age
类能否访问动态字段?对象能否访问静态字段?
类不能访问动态字段,因为动态字段是对象的一个属性,只属于对象。对象可以访问静态字段。访问方法:对象名.静态字段名,在前面的例子中为
print p1.memo 众多物种之一
注意:为了避免歧义,尽量避免对象访问静态字段
什么是静态方法和动态方法?
在最开始,我们说过
对象=属性+方法
那么什么是方法?
方法就是对象的一个行为,在python中方法就是一个函数,它可以被对象所调用,对象调用方法的可以这样写:对象名.方法名,
例如:
person: #静态字段 memo = (,name,age): #动态字段 .Name=name .Age=age #动态方法 action(): .Name + laowang=person(,) //实例化一个对象 laoli=person(,) laowang.action() //对象调用方法 laoli.action()
输出结果:
laowang正在上班 laoli正在上班
上例中action(self)这种带有参数的方法叫动态方法,动态方法只能被对象访问,而不能被类访问。
有了动态方法则也有静态方法,那么如果定义一个静态方法?
定义一个静态方法,有两个要求:
1、需要在动态方法上加一个装饰器“@staticmethod”
2、去掉self,因为静态方法属于类,而self属于对象
创建静态方法:
@staticmethod def foo(): print ‘这是一个静态方法‘
person: static(): person.static()
输出结果:
这是一个静态方法
总结:静态方法和动态方法的区别
静态方法能被类和对象访问,而动态方法只能被对象访问。静态方法需要@staticmethod装饰器修饰,并且不带有self
什么是特性(property)?
特性是字段和方法之外的一个定义,他不同于字段和方法,通常用来返回值,特性能被对象调用,
调用方法:对象名.方法名 注意方法名后面没有括号
如果定义一个特性?
在动态方法上加一个装饰器@property
例如:
@property def bar(self): return self.Name
person: (,name,age): .Name=name .Age=age static(): (): .Name laowang=person(,) laoli=person(,) laowang. laoli.
本文出自 “zengestudy” 博客,请务必保留此出处http://zengestudy.blog.51cto.com/1702365/1857953
原文地址:http://zengestudy.blog.51cto.com/1702365/1857953