详解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对象交互的资料请关注毛票票其它相关文章!