详解python对象之间的交互
先看看一般的类定义如下:
class类名: def__init__(self,参数1,参数2): self.对象的属性1=参数1 self.对象的属性2=参数2 def方法名(self):pass def方法名2(self):pass 对象名=类名(1,2)#对象就是实例,代表一个具体的东西 #类名():类名+括号就是实例化一个类,相当于调用了__init__方法 #括号里传参数,参数不需要传self,其他与init中的形参一一对应 #结果返回一个对象 对象名.对象的属性1#查看对象的属性,直接用对象名.属性名即可 对象名.方法名()#调用类中的方法,直接用对象名.方法名()即可
对象之间的交互
现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人。
现在我们要再创建一个狗类,狗就不能打人了,只能咬人,所以我们给狗一个bite方法。
有了狗类,我们还要实例化一只实实在在的狗出来。
然后人和狗就可以打架了。现在我们就来让他们打一架吧!
classPerson:#定义一个人类
role='person'#人的角色属性都是人
def__init__(self,name,aggressivity,life_value):
self.name=name#每一个角色都有自己的昵称;
self.aggressivity=aggressivity#每一个角色都有自己的攻击力;
self.life_value=life_value#每一个角色都有自己的生命值;
defattack(self,dog):
#人可以攻击狗,这里的狗也是一个对象。
#人攻击狗,那么狗的生命值就会根据人的攻击力而下降
dog.life_value-=self.aggressivity
classDog:#定义一个狗类
role='dog'#狗的角色属性都是狗
def__init__(self,name,breed,aggressivity,life_value):
self.name=name#每一只狗都有自己的昵称;
self.breed=breed#每一只狗都有自己的品种;
self.aggressivity=aggressivity#每一只狗都有自己的攻击力;
self.life_value=life_value#每一只狗都有自己的生命值;
defbite(self,people):
#狗可以咬人,这里的狗也是一个对象。
#狗咬人,那么人的生命值就会根据狗的攻击力而下降
people.life_value-=self.aggressivity
egg=Person('egon',10,1000)#创造了一个实实在在的人eggprint(egg.name)#在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常
ha2=Dog('二愣子','哈士奇',10,1000)#创造了一只实实在在的狗ha2
print(ha2.life_value)#看看ha2的生命值
egg.attack(ha2)#egg打了ha2一下
print(ha2.life_value)#ha2掉了10点血
面向对象的组合用法
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
classWeapon:
defprick(self,obj):#这是该装备的主动技能,扎死对方
obj.life_value-=500#假设攻击力是500
classPerson:#定义一个人类
role='person'#人的角色属性都是人
def__init__(self,name):
self.name=name#每一个角色都有自己的昵称;
self.weapon=Weapon()#给角色绑定一个武器;
egg=Person('egon')
egg.weapon.prick()
#egg组合了一个武器的对象,可以直接egg.weapon来使用组合类中的所有方法
圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。
这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积。然后在"环形类"中组合圆形的实例作为自己的属性来用
frommathimportpi classCircle: ''' 定义了一个圆形类; 提供计算面积(area)和周长(perimeter)的方法 ''' def__init__(self,radius): self.radius=radius defarea(self): returnpi*self.radius*self.radius defperimeter(self): return2*pi*self.radius circle=Circle(10)#实例化一个圆 area1=circle.area()#计算圆面积 per1=circle.perimeter()#计算圆周长 print(area1,per1)#打印圆面积和周长 classRing: ''' 定义了一个圆环类 提供圆环的面积和周长的方法 ''' def__init__(self,radius_outside,radius_inside): self.outsid_circle=Circle(radius_outside) self.inside_circle=Circle(radius_inside) defarea(self): returnself.outsid_circle.area()-self.inside_circle.area() defperimeter(self): returnself.outsid_circle.perimeter()+self.inside_circle.perimeter() ring=Ring(10,5)#实例化一个环形 print(ring.perimeter())#计算环形的周长 print(ring.area())#计算环形的面积
用组合的方式建立了类与组合的类之间的关系,它是一种‘有'的关系,比如教授有生日,教授教python课程
classBirthDate:
def__init__(self,year,month,day):
self.year=year
self.month=month
self.day=day
classCouse:
def__init__(self,name,price,period):
self.name=name
self.price=price
self.period=period
classTeacher:
def__init__(self,name,gender,birth,course):
self.name=name
self.gender=gender
self.birth=birth
self.course=course
defteach(self):
print('teaching')
p1=Teacher('egon','male',
BirthDate('1995','1','27'),
Couse('python','28000','4months')
)
print(p1.birth.year,p1.birth.month,p1.birth.day)
print(p1.course.name,p1.course.price,p1.course.period)
'''
运行结果:
1995127
python280004months
'''
以上就是详解python对象之间的交互的详细内容,更多关于python对象交互的资料请关注毛票票其它相关文章!