面向对象基础

编程的三种思想:
  1.  面向过程编程:根据业务逻辑从上到下垒代码
  2.  函数式:将某些功能封装到函数中,需要使用相应的功能变调用函数
  3.  面向对象:把函数根据功能或者其他进行分类或者封装

面向对象的思想

  •  对象是有具体的属性和方法的实例
  •  类是具有相同的属性和方法的一类事物

利用面向对象编程

 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()

 

 组合

  

  

 

 

 

 

  

  

posted @ 2018-03-17 11:06  chitalu  阅读(129)  评论(0)    收藏  举报