面向对象(基础)
# 定义一个类 class Person: mind = '思想' # 静态变量,静态字段 animal = '高级动物' def __init__(self,name,age): # 构造方法 self.name = name self.age = age def work(self): #方法 动态变量 print('都会工作') # 1, 查询类中的全部内容 print(Person.__dict__) # 可以使用del来删除类中的比字段 del Person.mind # 实例化对象 obj1 = Person('TOM',15) # 实例化的对象可以调用类或父类中的方法以及字段 print(obj1.animal) obj1.work() # 比如我们有一个需求 # (1) # 创建一个 # Game_role的类. # (2) # 构造方法中给对象封装name, ad(攻击力), hp(血量).三个属性. # (3) # 创建一个attack方法, 此方法是实例化两个对象, 互相攻击的功能: # 例: 实例化一个对象 # 盖伦, ad为10, hp为100 # 实例化另个一个对象 # 剑豪 # ad为20, hp为80 # 盖伦通过attack方法攻击剑豪, 此方法要完成 # '谁攻击谁,谁掉了多少血, 还剩多少血' # 的提示功能. class Game_role: def __init__(self,name,ad,hp): self.name = name self.ad = ad self.hp = hp def attack(self,target): target.hp = target.hp - self.ad print('{0}攻击了{1},{1}掉了{2}血,还剩{3}血'.format(self.name,target.name,self.ad,target.hp,)) gailun = Game_role('盖伦',10,100) jianhao = Game_role('剑豪',20,80) gailun.attack(jianhao) # python在实例化的过程中,首先在内存中开辟空间,将空间也就是self传给构造函数,而实例对象则指向这一块空间 # 实例化对象在执行方法时会将这处空间默认传给方法
# (1) # 创建一个 # Game_role的类. # (2) # 构造方法中给对象封装name, ad(攻击力), hp(血量).三个属性. # (3) # 创建一个attack方法, 此方法是实例化两个对象, 互相攻击的功能: # 例: 实例化一个对象 # 盖伦, ad为10, hp为100 # 实例化另个一个对象 # 剑豪 # ad为20, hp为80 # 盖伦通过attack方法攻击剑豪, 此方法要完成 # '谁攻击谁,谁掉了多少血, 还剩多少血' # 的提示功能. # 我们想给人物添加武器 # 例:盖伦使用大宝剑攻击了剑豪...... # 那么就需要一个武器类,一个人物类 class Game_role: def __init__(self,name,ad,hp): self.name = name self.ad = ad self.hp = hp # 添加一个装备武器的方法 def armament(self,wea): # 将一个实例赋值给另一个实例属性的过程又叫做组合 self.wea = wea class Weapon: def __init__(self,name,ad): self.name = name self.ad = ad def fight(self,o1,o2): o2.hp = o2.hp - self.ad - o1.ad print('{0}使用{2}攻击了{1},{1}掉了{3}血还剩{4}血'.format(o1.name,o2.name,self.name,self.ad + o1.ad,o2.hp)) # 实例化一把武器 sword = Weapon('宝剑',20) # 创建两个英雄 gl = Game_role('盖伦',10,100) jh = Game_role('剑豪',20,80) gl.armament(sword) gl.wea.fight(gl,jh) # result:盖伦使用宝剑攻击了剑豪,剑豪掉了30血还剩50血
# 例:定义一个类计算圆环面积和周长 # 首先我们先定义一个类计算单个圆的面积和周长 from math import pi class Circle: def __init__(self,r): self.r = r def area(self): return round(self.r ** 2 *pi , 2) def perimeter(self): return round(self.r * 2 * pi , 2) class Ring: def __init__(self,r1,r2): # 这里同样使用了组合的思想 self.r1 = Circle(r1) self.r2 = Circle(r2) def area(self): return round(self.r1.area() - self.r2.area()) def perimeter(self): return round(self.r1.perimeter() + self.r2.perimeter()) y1 = Ring(5,4) print(y1.area()) # result:28