Day17
1、面向对象
# 参加工作 # 游戏公司 # 人狗大战 # 角色 的属性固定下来 # 人 :昵称、性别、血、攻击力 # 狗 :名字、品种、血、攻击力 def Person(name,sex,hp,ad): # 人模子 self = {'name': name, 'sex':sex, 'hp': hp, 'ad': ad} def attack(dog): # 闭包 # 人攻击狗 print('%s攻击%s' % (self['name'], dog['name'])) # 狗掉血,狗的血量-人的攻击力 dog['hp'] -= self['ad'] self['attack'] = attack return self def Dog(name,kind,hp,ad): # 狗模子 self = {'name': name, 'kind':kind, 'hp': hp, 'ad': ad} def bite(person): print('%s咬了%s' % (self['name'], person['name'])) # 人掉血,人的血量-狗的攻击力 person['hp'] -= self['ad'] if person['hp'] <= 0: print('game over,%s win' % self['name']) def bite2():pass self['bite'] = bite self['bite2'] = bite2 return self # 人 规范了属性的个数 简化了创造任务的代码 alex = Person('a_sb','不详',1,5) boss_jin =Person('金老板','女',2,50) # 狗 chen = Dog('旺财','teddy',50,20) alex['attack'](chen) print(chen['hp'])
面向对象编程
类的概念:具有相同属性和技能的一类事物
人类 抽象
对象:就是对一个类的具体的描述
具体的人 具体
使用面向对象的好处:
使得代码之间的角色关系更加明确
增强了代码的可扩展性
规范了对象的属性和技能
2、语法
class person:
role='person' #静态属性
def f1(self): #动态属性 方法(函数) 默认带一个参数self
print(666)
查看静态变量的第一种方式
print(Person.__dict__) #内置的双下方法
print(Person.__dict__[‘role’])
Person.__dict__['role']=456 #报错
查看静态变量的第二种方式
print(Person.role)
Person.role=456
del Person.role
类名
#引用静态变量
1.类名.__dict__['静态变量名']可以查看,但不能删改
2.类名.静态变量名 直接可以访问 可以删改
#引用动态变量
1.类名.方法名 查看这个方法的内存地址
2.类名.方法名(实参) 调用了这个方法,必须传一个实参,这个实参传给了self
#创造了一个对象-实例化
产生一个实例(对象)的过程
对象=类名()
alex=Person() #创造一个对象
alex是对象,实例 Person是类
class Person: role = 'person' # 静态属性 def __init__(self,name,sex,hp,ad): self.name = name # 对象属性 属性 self.sex = sex self.hp = hp self.ad = ad def attack(self): print('%s发起了一次攻击'%self.name) alex = Person('a_sb','不详',1,5) boss_jin = Person('金老板','女',20,50) alex.attack() # Person.attack(alex) boss_jin.attack() # Person.attack(boss_jin)
实例化的过程:
1.创造一个实例,将会作为一个实际参数 # python
2.自动触发一个__init__的方法,并且把实例以参数的形式传递给__init__方法中的self形参
3.执行完__init__方法之后,会将self自动返回给alex
__init__方法 :初始化方法,给一个对象添加一些基础属性的方法,一般情况下是针对self的赋值
对象
在类的内部 self是本类的一个对象
在类的外部,每一个对象都对应着一个名字,这个对象指向一个对象的内存空间
属性的调用:
对象名.属性名 第一种调用方法
对象名.__dict__['属性名'] 第二种调用方法
方法的调用 :
类名.方法名(对象名) # 那么方法中的self参数就指向这个对象
对象名.方法名() # 这样写 相当于 方法中的self参数直接指向这个对象