动物是自然界一个庞大的群体,下面演示使用OOP建模动物类。
使用Python语言创建动物类的基本语法如下,使用class
关键字定义一个动物类:
class Animal():
pass
类里面可包括数据,如下所示的Animal
类包括两个数据:self.name
和self.speed
:
class Animal():
def __init__(self,name,speed):
self.name = name # 动物名字
self.speed = speed # 动物行走或飞行速度
注意到类里面通过系统函数__init__
为类的2个数据赋值,数据前使用self
保留字。
self
的作用是指名这两个数据是实例上的,而非类上的。
同时注意到__init__
方法的第一个参数也带有self
,所以也表明此方法是实例上的方法。
类里的name
和speed
为数据,其实它们有一个专业名称:属性。
如下,添加一个cprop
属性,它前面没有self
保留字:
class Animal():
cprop = '我是类上的属性cprop'
def __init__(self,name,speed):
self.name = name # 动物名字
self.speed = speed # 动物行走或飞行速度
def __str__(self):
return '''Animal({0.name},{0.speed}) is printed
name={0.name}
speed={0.speed}'''.format(self)
类上的属性直接使用类便可引用:
In [1]: Animal.cprop
Out[1]: '我是类上的属性cprop'
类上的属性,实例同样可以引用,并且所有的实例都共用此属性值:
In [1]:cat = Animal('加菲猫',8)
In [2]: cat.cprop
Out[2]: '我是类上的属性cprop'
Python作为一门动态语言,支持属性的动态添加和删除。
如下cat
实例原来不存在color
属性,但是赋值时不光不会报错,相反会直接将属性添加到cat
上:
cat.color = 'grap'
那么,如何验证cat
是否有color
属性呢?使用内置函数hasattr
:
In [24]: hasattr(cat,'color') # cat 已经有`color`属性
Out[24]: True
但是注意:以上添加属性方法仅仅为cat
实例本身添加,而不会为其他实例添加:
In [26]: monkey = Animal('大猩猩',2)
In [27]: hasattr(monkey,'color')
Out[27]: False
联系客服