面向对象
引出面向对象/面向对象编程
引出面向对象
游戏公司
人狗大战
人:
名字 性别 职业
技能
狗:
名字 品种 血条
技能
alex = { 'name':'alex', 'sex':'不详', 'job':'搓澡工', 'level': 0, 'hp':250, 'weapon':'搓澡巾', 'ad':1 } xiaobai = { 'name':'小白', 'kind':'泰迪', 'hp':5000, 'ad':249 }1.你怎么保证所有的玩家初始化的时候都拥有相同的属性
2、每来一个新的玩家,我们都自己手动的创建一个字典,然后向字典中填值
3、人物和狗的技能如何去写
def Person(name,sex,job,hp,weapon,ad,level=0): # 人模子 dic = { 'name':name, 'sex':sex, 'job':job, 'level': level, 'hp':hp, 'weapon':weapon, 'ad':ad } return dic alex = Person('alex','不详','搓澡工',250,'搓澡巾',1) wusir = Person('wusir','male','法师',500,'打狗棒',1000)
# 这样就解决:
### 1.你怎么保证所有的玩家初始化的时候都拥有相同的属性
### 2、每来一个新的玩家,我们都自己手动的创建一个字典,然后向字典中填值
def Dog(name,kind,hp,ad): dic = { 'name':'小白', 'kind':'泰迪', 'hp':5000, 'ad':249 } return dic xiaobai = Dog('alex','泰迪',5000,249) xiaojin = Dog('小金','柯基',10000,499) def cou(person,dog): dog['hp'] -= person['ad'] print(f'{person["name"]}攻击了{dog["name"]},{dog["name"]}掉了{person["ad"]}点血') cou(alex,xiaobai)
这样就解决:
1.你怎么保证所有的玩家初始化的时候都拥有相同的属性
2、每来一个新的玩家,我们都自己手动的创建一个字典,然后向字典中填值
def Person(name,sex,job,hp,weapon,ad,level=0): # 人模子 def cou(dog): dog['hp'] -= dic['ad'] print(f'{dic["name"]}攻击了{dog["name"]},{dog["name"]}掉了{dic["ad"]}点血') dic = { 'name':name, 'sex':sex, 'job':job, 'level': level, 'hp':hp, 'weapon':weapon, 'ad':ad, 'action':cou } return dic alex = Person('alex','不详','搓澡工',250,'搓澡巾',1) wusir = Person('wusir','male','法师',500,'打狗棒',1000) def Dog(name,kind,hp,ad): def zhua(person): person['hp'] -= dic['ad'] print(f'{dic["name"]}抓了{person["name"]},{person["name"]}掉了{dic["ad"]}点血') dic = { 'name':name, 'kind':kind, 'hp':hp, 'ad':ad, 'action':zhua } return dic xiaobai = Dog('alex','泰迪',5000,249) xiaojin = Dog('小金','柯基',10000,499) # def cou(person,dog): # dog['hp'] -= person['ad'] # print(f'{person["name"]}攻击了{dog["name"]},{dog["name"]}掉了{person["ad"]}点血') # # cou(alex,xiaobai) # # def zhua(dog,person): # person['hp'] -= dog['ad'] # print(f'{dog["name"]}抓了{person["name"]},{person["name"]}掉了{dog["ad"]}点血') # zhua(xiaojin,wusir) xiaobai['action'](alex) alex['action'](xiaojin)
面向过程:想要一个结果,写代码,实现计算结果面向对象开发: 有哪些角色,角色的属性和技能 两个角色之间是如何交互的
复杂的,拥有开放式结局的程序,比较适合使用面向对象开发
游戏
购物
面向对象编程
# 先来定义模子,用来描述一类事物
# 具有相同的属性和动作
class Person: # 类名 def __init__(self,name,sex,job,hp,weapon,ad,level=0,): # 必须叫 __init__这个名字,不能改变的,所有的在一个具体的人物出现之后拥有的属性 print('--'*20) self.name = name self.sex = sex self.job = job self.weapon = weapon self.ad = ad self.level = level print('**'*20) alex = Person('alex','不详','程序员',250,1,0) # alex就是对象, alex=Person()的过程,就是通过类获取一个对象的过程,就是实例化 # print(alex.name)# 类名()会自动调用类中的__init__的方法
# 类和对象之间的关系?
# 类 是一个大范围,是一个模子,它约束了事物有哪些属性,但是不能约束具体的值
# 对象 是一个具体的内容,是模子的产物,它遵循了类的约束,同时给属性赋上具体的值
# Person是一个类: alex wusir 都是这个类的对象
# 类有一个空间,存储的是定义在class中的所有名字
# 每一个对象又拥有自己的空间,通过对象名.__dict__ 就可以查看这个对象的属性和值print(alex.__dict__) # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 0, 'level': 0} # 实例化之后的对象的属性增删改查 alex.age = 100 print(alex.__dict__) # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 0, 'level': 0, 'age': 100} alex.ad = 100 print(alex.__dict__) # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 100, 'level': 0, 'age': 100} print(alex.name) # alex print(alex.__dict__) # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 100, 'level': 0, 'age': 100} del alex.age print(alex.__dict__) # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 100, 'level': 0} # 字典创建的一个空间,当value值发生改变时,字典的id是不变的。 d = {'k':'v'} print(d,id(d)) # {'k': 'v'} 1520594861336 d['k'] = 'vvvv' print(d,id(d)) # {'k': 'vvvv'} 1520594861336修改列表、字典中的某个值,或者是对象的某一个属性,都不会影响这个对象、字典、列表所在的内存空间。
---------------- end -------------------
对于一个有思想的人来说,没有地方是荒凉而遥远的