py5.25

# 一个类的对象.新属性名 = 另一个类的对象
# 另一个类的对象.方法 = 一个类的对象的.新属性名.方法
# class Weapon:
#     def __init__(self,name,price,hp=0,ad=0):
#         self.name = name
#         self.price = price
#         self.hp = hp
#         self.ad = ad
#     def kill(self,dog):
#         dog.hp -= self.ad
#
# 板儿砖 = Weapon('打狗砖',198,190)
# alex.weapon = 板儿砖
# alex.weapon.kill(taibai)

#学生和课程
# class Student:
#     def __init__(self,name,sex,age,phone,course):  #将课程的对象用参数传进来。
#         self.name = name
#         self.sex = sex
#         self.age = age
#         self.phone = phone
#         self.money = 0
#         self.course = course          #直接将课程作为学生的属性。
#
# class Project:
#     def __init__(self,name,period,price):
#         self.name = name
#         self.period = period
#         self.price = price
# English = Project('英语',6,60)
# math= Project('数学',10,100)
# ming = Student('张三','男',18,188,English)  #将课程的对象课程名称传给学生类中作为学生对象小明的属性。
# hong = Student('小红','女',17,160,math)
# print(ming.course.price)
# print(hong.course.name,hong.course.price)

#圆环与圆
#圆的类
# class circle:
#     def __init__(self,r):
#         self.r = r
#
#     def perimiter(self):
#         return 2*3.14*self.r     #创建对象的时候直接将半径传入,此处直接用即可,用self.r
#
#     def area(self):
#         return 3.14*self.r**2
#
# #圆环的类
# class ring:
#     def __init__(self,out_r,in_r):
#         self.out_r = circle(out_r)   #将圆函数中的对象作为属性返回来。
#         self.in_r = circle(in_r)
#
#     def perimiter(self):
#         return  self.out_r.perimiter() +self.in_r.perimiter() #在此用返回来的属性来调用圆中的方法。
#
#     def area(self):
#         return self.out_r.area() - self.in_r.area()
#
# obj = ring(10,5)    #创建对象
# print(obj.area())   #调用方法。

# 抽象类和接口类都不能被实例化,约束了一种规范。其它所有类用这种方法时都要依照这种规范。
#组合:一个类中的对象被当做另一个类中对象的属性。
#给人加一个装备,加一个装备的类:
# class Person:
#     def __init__(self,name,sex,hp,ad):
#         self.name =name
#         self.sex = sex
#         self.hp = hp
#         self.ad = ad
#         self.money = 0吗           #money属性可以在方法中直接定义一个初始值0
#     def attack(self,dog):
#         dog.hp -= self.ad
#
#     def recharge(self,money):       #充值函数,如果余额不足调用这个函数充值
#         self.money += money
#
#     def buy_weapon(self,thing):     #买装备函数,如果想用装备,则调用这个函数,按指示执行。
#         if self.money >= thing.price:
#             self.money -= thing.price
#             self.weapon = wp        #如果购买成功,则将武器中的‘咒术典籍’对象当做一个属性赋予给alex。
#             #这样alex可以在攻击力不够的情况下利用这个‘咒术典籍’属性(武器中的一个对象)来调用武器中的kill方法。
#             thing.total_ad += self.ad  #在次可以将武器的攻击力加上人的攻击力赋予给原武器的攻击力值。
#             print('已经成功购买%s装备!' % thing.name)
#         else:
#             print('余额不足请充值')
#
# class Dog:
#     def __init__(self,name,kind,hp,ad):
#         self.name = name
#         self.kind = kind
#         self.hp = hp
#         self.ad = ad
#     def bite(self,person):
#         if person.hp <= self.ad:
#             person.hp = 0
#         else:
#             person.hp -= self.ad
#
# class Weapon:
#     def __init__(self,name,price,ad=0,hp=0):
#         self.name = name
#         self.price = price
#         self.hp = hp
#         self.total_ad = ad
#     def kill(self,dog):
#         if dog.hp <= self.total_ad:   #如果武器被购买,则这里的攻击值变成了购买者的攻击值加上武器本身的攻击值。
#             dog.hp = 0
#         else:
#             dog.hp -= self.total_ad
#
# alex = Person('alex',None,50,1)
# taibai = Dog('taibai',None,190,50)
# wp = Weapon('咒术典籍',998,180)
# alex.buy_weapon(wp)          #先购买装备,提示余额不足。
# alex.recharge(1000)          #调用充值函数。
# alex.buy_weapon(wp)          #再次购买并购买成功。
# alex.attack(taibai)          #alex先不用武器攻击了一下taibai.
# alex.weapon.kill(taibai)     #然后带上武器又一起攻击了一下。
# print(taibai.hp)             #最后查看taibai的血量值。

#类的继承:
#为了避免代码的重复性,子类中共有的属性可以只在父类中定义即可,子类中照样正常传值,只不过不用定义了。
#子类中独有,父类中没有的属性:派生属性
#子类中独有,父类中没有的方法:派生方法
#子类中使用父类中定义的属性;
#                          指名道姓:父类名.__init__(self,参数)
#                          简化方法:super().__init__(参数)
#子类中调用父类中的同名方法:
#                  如果子类中不存在:子类的对象.函数/方法名
#                  如果子类中存在:  surper().函数/方法名。 如果此处直接用对象名,则会找子类自己的方法,不会找父类。
# class Role:
#     def __init__(self,name,hp,ad):
#         self.name = name
#         self.hp = hp
#         self.ad = ad
#     def func(self):
#         print('父类')
#
# class Person(Role):
#     def __init__(self,name,sex,hp,ad):
#         self.sex = sex
#         # Role.__init__(self,name,hp,ad) #指名道姓方法,需要自己将self参数传进去,还有其它需要用到父类中定义的属性
#         super(Person, self).__init__(name,hp,ad)  #不需要自己传参self.
#         #括号中的可省略,super().__init__(name,hp,ad)
#         # self.func()         #对象名直接调用,先找自己的方法,如果没有再找父类中的方法。
#         super().func()        #想用父类中的方法,用super().方法名
#     def func(self):
#         print('子类')
# alex = Person('alex','男',500,1)
# print(alex.name)
View Code

猜你喜欢

转载自www.cnblogs.com/liujjpeipei/p/9090427.html
今日推荐