面向对象基础
编程的三种思想:
- 面向过程编程:根据业务逻辑从上到下垒代码
- 函数式:将某些功能封装到函数中,需要使用相应的功能变调用函数
- 面向对象:把函数根据功能或者其他进行分类或者封装
面向对象的思想
- 对象是有具体的属性和方法的实例
- 类是具有相同的属性和方法的一类事物
利用面向对象编程
1. 定义一个类
1 class 类名:#类名首字母大写 2 属性 = "功能"#---类的属性:静态属性,不是必须要定义的,当多有的对象都用的时候去定义 3 def __init__(self,参数):#--self是不需要传的 4 # __init__这里是定义了一个该类对象共有的属性 5 # 这里的属性是对象属性, 6 self.key = 参数 # 这里self.key就相当于字典的key,参数就相当于value 7 8 def 方法(self): # 类里面的方法本质上就是函数--函数必须要传一个参数self 9 pass # 类的方法就是动态属性 10 11 print(类名.属性) 12 # 实例化一个对象,实例化的时候就是自动的除法__init__方法 13 # --实例化,对象就是实例 14 对象 = 类名("参数") #---参数是传到__init__函数里 15 16 对象.函数名() 17 # 调用成功,传入的self就是对象, 18 # 当用一个对象去调用它的方法的时候,会自动传入一个参数,这个参数就是对象本身 19 20 # 类里边凡是用def去定义的都是动态属性或者叫方法 21 # 静态属性,所有的对象共有的属性,可以直接调用 22 # 对象属性,是属于某一个对象的,只能在实例化之后对象调用
2. 小结:
类名--调用类属性,查看类方法
对象名--调用对象属性,调用类属性(尽量不要)
对象名调用方法 --方法也叫动态属性
3. 示例1
1 class Person: # 定义了一个人类 2 role = "person" # 人类的属性就是人,静态属性,可以不定义,可以直接调用 3 4 def __init__(self, name, sex, aggr=200): # 定义一些关于人类对象共有属性的函数,里面都是对象属性 5 self.name = name # 名字 6 self.sex = sex # 性别 7 self.aggression = aggr # 攻击力 8 self.blood = 20000 # 血量 9 10 def attack(self, person): # 定义了一个攻击的函数,这是定义了方法,对象实例化后才能去调用它,动态属性 11 person.blood = person.blood - self.aggression # self攻击person,person被攻击,所以他的血量要减少, 12 print("%s攻击%s" % (self.name, person.name)) # 打印一个self攻击person 13 14 15 alex = Person("alex", "male") # 对象的实例化 16 egon = Person("egon", "male", 300) # 对象的实例化 17 alex.attack(egon) # 调用攻击函数alex攻击egon 18 print(alex.blood, egon.blood) 19 egon.attack(alex) # 调用攻击函数egon攻击alex 20 print(egon.blood, alex.blood)
4.输出如下信息
小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
老张…
1 class Person: 2 def __init__(self,name,age,sex="男"): 3 self.name = name 4 self.age = age 5 self.sex = sex 6 def kanchai(self): 7 print("%s,%s岁,%s,上山去砍柴"%(self.name,self.age,self.sex)) 8 def kaiche(self): 9 print("%s,%s岁,%s,开车去东北"%(self.name,self.age,self.sex)) 10 def baojian(self): 11 print("%s,%s岁,%s,最爱大保健"%(self.name,self.age,self.sex)) 12 13 xiaoming = Person("小明",10) 14 xiaoming.kanchai() 15 xiaoming.kaiche() 16 xiaoming.baojian() 17 laozhang = Person("老张",90) 18 laozhang.kanchai() 19 laozhang.baojian() 20 laozhang.kaiche()
5. 计算圆的面积和周长
1 from math import pi # 得到精确地π值 2 class Circle: 3 rloe = "circle" 4 def __init__(self,r): 5 self.r = r 6 def length(self): 7 return 2*pi*self.r 8 def area(self): 9 return pi*self.r*self.r 10 11 12 val = Circle(10) 13 val_l = val.length() 14 print(val_l) 15 val_s = val.area() 16 print(val_s)
6. 人狗大战第一版
1 class Person: 2 role = "preson" 3 def __init__(self,name,sex,aggression=200): 4 self.name = name 5 self.sex = sex 6 self.aggr = aggression 7 self.blood = 20000 8 def attack(self,person): 9 print("%s attack %s"%(self.name,person.name)) 10 person.blood = person.blood - self.aggr 11 12 13 class Dog: 14 role = "dog" 15 def __init__(self,name,sex,aggression=50): 16 self.name = name 17 self.sex = sex 18 self.aggr = aggression 19 self.blood = 20000 20 def bite(self,person): 21 print("%s bite %s"%(self.name,person.name)) 22 person.blood = person.blood - self.aggr 23 24 25 alex = Person("alex","male",250) 26 egon = Dog("egon","公",500) 27 28 while alex.blood: 29 alex.attack(egon) 30 egon.bite(alex) 31 print(alex.blood,"%s阵亡"%(alex.name)) 32 print(egon.blood)
7. 人狗大战进阶版
1 class Person: 2 role = "preson" 3 def __init__(self,name,sex,aggression=200): 4 self.name = name 5 self.sex = sex 6 self.aggr = aggression 7 self.blood = 2000 8 def attack(self,dog,n): 9 dog.blood = dog.blood - self.aggr 10 print("%s 第%d次攻击 %s,%s的血还有%s"%(self.name,n,dog.name,dog.name,dog.blood)) 11 if dog.blood<=0: 12 print("很遗憾,%s is game over"%dog.name) 13 14 class Dog: 15 role = "dog" 16 def __init__(self,name,breed,aggression=50): 17 self.name = name 18 self.breed = breed 19 self.aggr = aggression 20 self.blood = 2000 21 def bite(self,person,m): 22 person.blood = person.blood - self.aggr 23 print("%s 第%d次咬 %s,%s的血还有%s"%(self.name,m,person.name,person.name,person.blood)) 24 if person.blood<=0: 25 print("很遗憾,%s is game over"%person.name) 26 27 28 def player_choice(play_person,play_dog): 29 n = 0 30 m = 0 31 while True: 32 choice = input("请选择人或狗攻击:") 33 if choice.strip() == "人": 34 n += 1 35 play_person.attack(play_dog,n) 36 elif choice.strip() == "狗": 37 m += 1 38 play_dog.bite(play_person,m) 39 elif choice.strip().lower() == "q": 40 print("即将退出游戏,请稍等...") 41 break 42 else: 43 print("输入的角色名错误") 44 45 46 def player(): 47 play_person_name = input("play_person_name:") 48 play_person_sex = input("play_person_sex:") 49 play_person_aggression = int(input("play_person_aggression:")) 50 51 play_person = Person(play_person_name,play_person_sex,play_person_aggression) 52 53 play_dog_name = input("play_dog_name:") 54 play_dog_breed = input("play_dog_sex:") 55 play_dog_aggression = int(input("play_dog_aggression:")) 56 57 play_dog = Dog(play_dog_name,play_dog_breed,play_dog_aggression) 58 59 player_choice(play_person,play_dog) 60 61 62 player()
组合
浙公网安备 33010602011771号