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


# 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。
 
原文地址:https://www.cnblogs.com/pioneerLee/p/10223398.html