码迷,mamicode.com
首页 > 编程语言 > 详细

Python面向对象编程

时间:2016-09-30 07:53:58      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:python类和对象的关系


什么是类和对象?

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

Python面向对象编程

标签:python类和对象的关系

原文地址:http://zengestudy.blog.51cto.com/1702365/1857953

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!