python 基础复习 13
1 # class Person: 2 # def __init__(self,name,blood,aggr,sex): 3 # self.name = name 4 # self.blood = blood 5 # self.aggr = aggr 6 # self.sex = sex 7 # def attack(self,dog): 8 # # 人打狗,狗掉血 9 # jin.blood -= self.aggr 10 # if jin.blood <= 0: 11 # print("%s打了%s,%s被打死了"%(self.name,dog.name,dog.name)) 12 # 13 # class Dog: 14 # def __init__(self,name,blood,aggr,kind): 15 # self.name = name 16 # self.blood = blood 17 # self.aggr = aggr 18 # self.kind = kind 19 # def bite(self,person): 20 # # 狗咬人,人掉血 21 # person.blood -= self.aggr 22 # if person.blood <= 0: 23 # print("%s咬了%s,%s被咬死了"%(self.name,person.name,person.name)) 24 # 25 # jin = Dog("laoban",100,200,"buxiang") 26 # alex = Person("alex",200,10,"不详") 27 # # print(jin.name) 28 # jin.bite(alex) 29 # print(alex.blood) 30 # alex.attack(jin) 31 # print(jin.blood) 32 33 34 # 练习 35 """ 36 小明,10岁,男,上山去砍柴 37 小明,10岁,男,开车去东北 38 小明,10岁,男,最爱大保健 39 老李,90岁,男,上山去砍柴 40 老李,90岁,男,开车去东北 41 老李,90岁,男,最爱大保健 42 """ 43 44 # class Person: 45 # def __init__(self,name,age,sex): 46 # self.name = name 47 # self.age = age 48 # self.sex = sex 49 # def shangshan(self): 50 # print("%s, %s岁, %s, 上山去砍柴"%(self.name,self.age,self.sex)) 51 # 52 # def drive(self): 53 # print("%s, %s岁, %s, 开车去东北"%(self.name,self.age,self.sex)) 54 # 55 # def hobby(self): 56 # print("%s, %s岁, %s, 最爱大保健"%(self.name,self.age,self.sex)) 57 # 58 # min = Person("小明","10","男") 59 # min.shangshan() 60 # min.drive() 61 # min.hobby() 62 # li = Person("老李","90","男") 63 # li.shangshan() 64 # li.drive() 65 # li.hobby() 66 67 # circle 属性 半径 , 两个方法:求周长和面积 68 # from math import pi 69 # class Circle: 70 # def __init__(self,r): 71 # self.r = r 72 # def area(self): 73 # return pi*(self.r**2) 74 # def circleMeter(self): 75 # return 2*pi*self.r 76 # c1 = Circle(5) 77 # print(c1.area()) 78 # print(c1.circleMeter()) 79 80 """ 81 class 里面 82 函数: 就是方法 动态属性 # 类中可以定义方法,方法都有一个必须传的参数self 83 变量: 就是类属性 静态属性 # 类中可以定义静态属性 84 85 __init__方法 初始化方法 86 python帮我们创建了一个对象self 87 每当我们调用类的时候就会自动触发这个方法。默认传self 88 在init方法里面可以对self进行赋值 89 90 self是什么 self拥有属性都属于对象 91 在类的内部,self就是一个对象 92 93 实例化 94 对象 = 类(参数是init方法的) 这就是实例化 95 96 实例、对象 97 实例就是对象,对象就是实例 98 完全没有区别 99 100 对象查看属性 101 对象.属性名 102 103 对象调用方法 104 对象.方法名(参数) 105 """ 106 107 # 类里 可以定义两种属性 108 # 静态属性 109 # 动态属性 110 111 112 # class Course: 113 # language = "Chinese" 114 # def __init__(self,teacher,course_name,period,price): 115 # self.teacher = teacher 116 # self.name = course_name 117 # self.period = period 118 # self.price = price 119 # def func(self,r): 120 # print("调用了") 121 # Course.language 122 # Course.language = "English" # 只能用这种方法去修改类里面的静态属性 123 # print(Course.language) 124 # print(Course.__dict__) 125 # Course.__dict__["language"] = "Russian" # 这行代码报错 不能通过__dict__来修改静态属性 126 # python1 = Course("egon","python","six_months",20000) 127 # print(python1.language) 128 # python1.language = "English" # 对象改变不了类中的属性 129 # print(python1.language) 130 # print(Course.language) 131 # 类中的静态变量 可以被对象和类调用 132 133 134 # 创建一个类,每实例化一个对象就记录下来 135 # 最终所有的对象共享这个数据 136 # class Foo: 137 # count = 0 138 # def __init__(self): 139 # Foo.count += 1 140 # 141 # f1 = Foo() 142 # f2 = Foo() 143 # print(f1.count) 144 # print(f2.count) 145 # f3 = Foo() 146 # print(f3.count) 147 148 # class Foo: 149 # def func(self): 150 # print("func") 151 # 152 # f1 = Foo() 153 # print(Foo.func) 154 # print(f1.func) 155 156 157 158 # 组合 159 class Dog: 160 def __init__(self,name,aggr,blood,kind): 161 self.name = name 162 self.aggr = aggr 163 self.blood = blood 164 self.kind = kind 165 166 def bite(self,person): 167 person.blood -= self.aggr 168 169 class Person: 170 def __init__(self,name,aggr,blood,sex): 171 self.name = name 172 self.aggr = aggr 173 self.blood = blood 174 self.kind = sex 175 self.money = 0 176 177 def attack(self,dog): 178 dog.blood -= self.aggr 179 180 def get_weapon(self,weapon): 181 if self.money >= weapon.price: 182 self.money -= weapon.price 183 self.weapon = weapon 184 self.aggr += weapon.aggr 185 else: 186 print("余额不足,请先充值") 187 188 class Weapon: 189 def __init__(self,name,aggr,njd,price): # aggr 攻击力 njd 耐久度 190 self.name = name 191 self.aggr = aggr 192 self.njd = njd 193 self.price = price 194 def hand18(self,dog): 195 if self.njd > 0: 196 dog.blood -= self.aggr * 2 197 self.njd -= 1 198 199 200 alex = Person("alex",1,100,"不详") 201 jin = Dog("老板",2,200,"不详") 202 w = Weapon("打狗棒",100,3,998) 203 # 怎么给alex装上打狗棒 204 alex.money += 1000 205 alex.get_weapon(w) 206 print(alex.weapon) 207 print(alex.aggr) 208 209 alex.attack(jin) 210 print(jin.blood) 211 212 alex.weapon.hand18(jin) 213 print(jin.blood) 214 215 # 装备 216 # 伤害 217 # 血量 218 219 # 组合 :一个对象的属性值是另外一个类的对象
# 创建一个老师类
# 老师有生日
# 生日也可以是一个类
# 用组合
# class Birthday:
# def __init__(self,year,month,day):
# self.year = year
# self.month = month
# self.day = day
#
# class Course:
# language = ["Chinese"]
# def __init__(self,teacher,course_name,period,price):
# self.teacher = teacher
# self.name = course_name
# self.period = period
# self.price = price
#
# class Teacher:
# def __init__(self,name,age,sex,birthday):
# self.name = name
# self.age = age
# self.sex = sex
# self.birthday = birthday
# self.course = Course(self,"python","six_month",20002)
#
# b = Birthday(2018,1,16)
# egg = Teacher("egon",0,"女",b)
# print(egg.name)
# print(egg.birthday.year)
# print(egg.birthday.month)
# print(egg.birthday.day)
# print(egg.course.price)
# 定义一个老师类 在定义一个生日类
# b是生日类的一个实例化对象 然后把 b 当做参
# 数,传给 egg 这个老师类的实例对象,这样老
# 师里的对象就可以调用生日类里的属性了 这就是组合
# 面向对象的三大特性
# 继承
# 多态
# 封装
"""
什么是继承:
继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,
父类又可称为基类或者超类,新建的类称为派生类或子类
"""
# class Animal:
# def __init__(self,name,aggr,blood):
# self.name = name
# self.aggr = aggr
# self.blood = blood
#
# class Dog(Animal):
# def bite(self,person):
# person.blood -= self.aggr
#
# class Person(Animal):
# def attack(self,dog):
# dog.blood -= self.aggr
#
# jin = Dog("金老板",200,500)
# alex = Person("alex",200,700)
# alex.attack(jin)
# print(jin.blood)
# jin.bite(alex)
# print(alex.blood)
# class Animal:
# def __init__(self):
# print("执行Animal.__init__")
# self.func()
# def eat(self):
# print("%s eating"%self.name)
#
# def drink(self):
# print("%s drinking"%self.name)
# def func(self):
# print("Animal.func")
#
# class Dog(Animal):
# def guard(self):
# print("guarding")
# def func(self):
# print("Dog.func")
# dog = Dog()
# 执行后的结果
# 执行Animal.__init__
# Dog.func
# 注意 Dog()里有func()这个方法,所有就用Dog自己里的 不用父类里面的
# 子类里没有__init__方法 就用父类里面的
# class Animal:
# def __init__(self,name,aggr,blood):
# self.name = name
# self.aggr = aggr
# self.blood = blood
#
# def eat(self):
# print("吃药回血")
# self.blood += 100
#
# class Dog(Animal):
# def __init__(self,name,aggr,blood,kind):
# Animal.__init__(self,name,aggr,blood)
# self.kind = kind # 派生类
#
# def bite(self,person): # 派生方法(父类没有,子类有的)
# person.blood -= self.aggr
#
# class Person(Animal):
# def __init__(self,name,aggr,blood,sex):
# Animal.__init__(self,name,aggr,blood)
# self.sex = sex # 派生属性
# self.money = 0 # 派生属性 (父类里没有,子类里有的,就叫派生)
#
# def attack(self,dog):
# dog.blood -= self.aggr
#
# def get_weapon(self,weapon):
# if self.money >= weapon.price:
# self.money -= weapon.price
# self.weapon = weapon
# self.aggr += weapon.aggr
# else:
# print("余额不足,请先充值")
#
# jin = Dog("金老板",100,500,"不详")
# print(jin.name)
# jin.eat()
# print(jin.blood)
# 只要是子类的对象调用,子类中有的名字 一定用子类的,子类中没有才找父类的,如果父类中没有就报错
# 如果父类 子类都有 那么还是用子类的
# 如果就是想用父类的,就在子类中在调用父类的属性或方法
# class Animal:
# def __init__(self,name,aggr,blood):
# self.name = name
# self.aggr = aggr
# self.blood = blood
#
# def eat(self):
# print("吃药回血")
# self.blood += 100
#
#
# class Dog(Animal):
# def __init__(self,name,aggr,blood,kind):
# super().__init__(name,aggr,blood)
# self.kind = kind # 派生属性
# jin = Dog("金老板",200,500,"不详")
# print(jin.name)
# 父类中没有的属性,在子类中出现 叫做派生属性
# 父类中没有的方法 在子类中出现 叫做派生方法
# 如果是子类的对象调用,子类中的名字 一定用子类的,子类中没有才找父类中的,如果父类也没有 就报错
# 如果父类 子类都有 就用子类的
# 如果还是想用父类的,就单独在调用父类的:
# 第一种 父类名.方法名 不过需要自己传参数
# 第二种 super().方法名 不需要自己传self
# 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。