面向对象与组合
类与对象
面向对象的编程方式
class
定义函数: 方法 动态属性
定义变量: 类属性 静态属性
__init__方法 初始化方法
python帮我们创建了一个对象self
每当我们调用类的时候就会触发这个方法
# class Dog: # def __init__(self,name,hp,ad,sex): # self.name = name # self.hp = hp # self.ad = ad # self.sex = sex # def bite(self,person): # person.hp -= self.ad # print('%s被咬了,掉了%s的血'%(person.name,self.ad)) # class Person: # def __init__(self,name,hp,ad,sex): # self.name = name # self.hp = hp # self.ad = ad # self.sex = sex # def kick(self,dog): # dog.hp -= self.ad # print('%s被踢了,掉了%s的血'%(dog.name,self.ad)) # eg = Person('二狗',100,5,'nan') # dh = Dog('大黄',100,10,'teddy') # dh.bite(eg) # eg.kick(dh) # print(dh.hp) # print(eg.hp)
# from math import pi # class Circle: # 类,类里面可以定义方法方便使用 # def __init__(self,r): # self.r = r # def area(self): # 方法 # return pi*self.r**2 # def perm(self): # 方法 # return 2*pi*self.r # c1 = Circle(4) # print(c1.area()) # print(c1.perm())·
组合
# 对于不可变数据类型 类便最好用类名操作
# 对于可变数据类型 对象名的修改是共享的 重新赋值是独立的
#对象名调用方法 就发生了绑定
class Person: def __init__(self,name,hp,aggr,sex): self.name = name self.hp = hp self.aggr = aggr self.sex = sex self.money = 0 def kick(self,dog): dog.hp -= self.aggr def get_weap(self,weap): if self.money>=weap.price: self.money -= weap.price self.aggr += weap.aggr self.weap = weap else: print('no money') class Dog: def __init__(self,name,hp,aggr,kind): self.name = name self.hp = hp self.aggr = aggr self.kind = kind def bite(self,person): person.ho -= dog.aggr class Weap: def __init__(self,name,aggr,nai,price): self.name = name self.aggr = aggr self.nai = nai self.price = price def R(self,aim): if self.nai>0: print('暴击') aim.hp -= self.aggr*2.5 self.nai -= 1 ren = Person('二狗',100,5,'难') dh = Dog('大黄',1000,20,'teddy') wu = Weap('斩黄剑',200,3,999) ren.money += 1000 ren.get_weap(wu) ren.kick(dh) print(dh.hp) ren.weap.R(dh) print(dh.hp)
# 组合 : 一个对象的属性值是另一个类的对象