# 自己设计一个人与狗的游戏
# def Person(life_value,aggr,name,job):
# def attack( dog, ):
# print('%s 攻击了 %s' % (person["name"], dog['name']))
# dog['life_value'] = dog['life_value'] - person['aggr']
# person={ #模子
# 'life_value': life_value,#生命值
# 'aggr': aggr, #攻击力
# 'name':name,
# 'job':job,
# 'attack':attack
# }
# return person
# boss_gold=Person(1000,2,'金老板','boss')
# alex=Person(250,250,'alex','bigboss')
# # print(boss_gold['life_value'])
#
# def Dog(name,life_value,aggr,kind):
# def bite( person):
# print('%s 咬了 %s' % (dog["name"], person["name"]))
# person['life_value'] = person['life_value'] - dog['aggr']
# dog={
# 'name':name,
# 'life_value':life_value,
# 'aggr': aggr,
# 'kind':kind,
# 'bite':bite
# }
# return dog
# alph=Dog('alphago',10000,999,'AI')
# flower=Dog('小花',150,30,'2ha')
# alph['bite'](boss_gold)
# alex['attack'](flower)
# def attack(dog,person ):
# print('%s 攻击了 %s' % (person["name"], dog['name']))
# dog['life_value'] = dog['life_value'] - person['aggr']
# # attack(boss_gold,flower)
# # print(flower['life_value'])
# def bite(dog,person):
# print('%s 咬了 %s'%(dog["name"],person["name"]))
# person['life_value']=person['life_value']-dog['aggr']
# # bite(alph,alex)
# # print(alex['life_value'])
#
# bite(alex,alph)
# 由原来学过的知识写了四个函数,分别是人,狗,人的技能,狗的技能,然后进一步优化
# 将狗的技能函数嵌套在狗函数中,同时狗函数中增加一个咬技能(而)狗函数中页少传一个参数
# 避免了传错参数的可能,同样的操作应用在人函数中代码完成优化
# 上面的就是面向对象编程,它是一种思想,而不是表现在语法上的
# 对象就是具体的拥有准确属性值的一些事物(一些变量)
# 类:就是一类具有相同属性和方法的事物
# 类 的详细介绍
# 类的定义 class 关键字 类名的首字母大写
# 类中直接定义属性:静态属性(变量)和动态属性(函数)
#类的名字有两个作用:属性的引用,实例化对象
# class Person: #类名有两个作用(class关键字+ 类名首字母必须大写)
# country = '中国' #类的属性(静态属性,数据属性)
# def __init__(self):#初始化方法
# pass
# def walk(self):
# print('walk')#动态属性,函数属性,方法(定义在类里面的方法)
#
# # print(Person.country) #使用类的属性 用类名.属性就可以了(静态属性的查看)
# # print(Person.walk)
# # Person.role="人" #添加一个新静态属性
# # Person.country='印度'#修改一个新静态属性
# # del Person.role #静态属性的删除
# # print(Person.__dict__['country']) #只能查看,不能修改
#
# # 类能完成的第二个功能:实例化对象
# # 实例化:从一个类中创造一个具体的对象的过程
#
# # 由 类 到对象实例 的过程 就叫做实例化
# #p=Person(1000,2,'金老板','boss')#加上一个括号就获得了一个对象# 如何让对象具有具体的属性
# p=Person()# 此刻p是 初始化的对象,而self是新造出来裸着的对象
# print(p)# Person的对象
# 实例化 ----类名(参数)
#构造方法:造对象
#初始化:给这个赤裸裸的对象添加一些属性__init__
# 反回了一个初始化的方法
#__init__方法:初始化方法,可以没有,给对象添加一些基础属性
# 以下是自己课上练习的
# class Person:
# country = '中国'
# def __init__(self,life_value,aggr,name,job):
# self.lv=life_value#属性,对象的属性
# self.aggr = aggr
# self.name =name
# self.job =job
# def walk(self):
# print('walk')
#
# p=Person(1000,2,'金老板','boss')
# # Person.walk(p) #这个调用的方法有点麻烦
# p.walk() #等同于上面的方法,效果一样,并且简单
# print(p.lv)
# print(p.aggr)
# print(p.name)
# print(p.job)
# print(p.__dict__) #通过它可以查看所有的对象属性以及值
# # print(p.__dict__["lv"]) #通过双下方法可以查
# p.__dict__["lv"]=998#对象名.__dict__中的属性值可以被修改
# print(p.__dict__["lv"],p.lv)#通过双下可以改
# print(p.__dict__)
# p.__dict__['sex']='男'#对象名.__dict__中的属性值可以增加
# print(p.__dict__)
# p.__dict__.pop("sex")#对象名.__dict__中的属性值可以被删除
# print(p.__dict__)
# p.sex ='男' #以下一套方法较为常用
# print(p.sex)#添加一个属性
# p.sex ='女'
# print(p.sex)#修改一个属性
# del p.sex
# print(p.__dict__) #删除一个属性
#self 的含义就是这个对象本身
#对象和属性的操作 对象名.对象名 huo 对象名.__dict__['属性名'](不修改能)
# 交互
# class Person:
# country = '中国'
# def __init__(self,life_value,aggr,name,job):
# self.lv=life_value#属性,对象的属性
# self.aggr = aggr
# self.name =name
# self.job =job
# def walk(self):
# print('%s is walking'%self.name)
# boss_gold=Person(10,1,"太白太黑太亮",'old_drive')
# alex = Person(100,2.5,"张嘴闭嘴特斯拉",'鸡汤哥')
# # boss_gold.walk()
# # alex.walk()
# boss_gold.sex ='None'
# print(alex.__dict__)