zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    215. Kth Largest Element in an Array
    B:魔兽世界之一:备战
    218. The Skyline Problem
    编程作业: 编程作业—类和对象
    239. Sliding Window Maximum
    313. Super Ugly Number
    hdu3068 manacher模板题
    fzu1901 kmp
    hdu2609 最小表示法
    hdu3374 kmp+最小表示法
  • 原文地址:https://www.cnblogs.com/liujjpeipei/p/9090427.html
Copyright © 2011-2022 走看看