面向对象
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']) self['bite'] = bite return self alex = Person('a_sb','不详',1,5) boss_jin = Person('金老板','女',2,50) chen = Dog('旺财','Teddy',50,20) alex['attack'](chen) print(chen['hp'])
使用面向对象的好处:
1,使得代码之间的角色关系更加明确。
2,增强了代码的可扩展性。
3,约束了对象的属性和技能。
面向对象的特点: 结局的不确定性。
2,面向对象的语法:
class 类 + 首字母大写
class Person: role = '232' def f1(self): print(123145) Person.f1()
类名:1,引用静态变量
class Person: static = 123 print(Person.__dict__)
1,第一种查看方法:类名.__dict__['静态变量'],可以查看,但不能删改
{'__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__doc__': None, 'static': 123}
2,第二种查看方法:类名.静态变量名,直接就可以访问,可以删改,删除一个静态变量,del Person.静态变量
class Person: roue = 'ahhf' Person.roue = 'jiji' print(Person.roue)
2,引用动态变量
1,类名 . 方法名,查看这个方法的内存地址。
class Person: 静态变量 = 123 role = 'person' def f1(self):#默认带一个参数self,方法,动态属性 print(12345) print(Person.f1)#<function Person.f1 at 0x000001DC04846950>
2,类名 . 方法名(实参),调用了这个方法,必须传一个实参,这个实参传给了self
class Person: 静态变量 = 123 role = 'person' def f1(self):#默认带一个参数self,方法,动态属性 print(12345) Person.f1(1)#必须传一个实参给self
3,创造一个对象:类名 + 括号 Person()
1,创造一个实例将会作为一个实际参数。
2,自动触发一个__init__的方法,并且把实例以参数的形式,传递给__init__方法中的self形参。
3,执行完__init__方法之后,会将self 自动返回给对象。
class Person: role = 'asjj' def __init__(self): print(2423) alex = Person()
__init__方法:就是初始化方法,给一个对象添加一些基础属性的方法,一般情况下是针对self 的赋值。
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('alex','不详',2,4,) boss_jin = Person('金老板','女',2,3) alex.attack() boss_jin.attack()
对象
1,在类的内部,self是本类的一个对象。
2,在类的外部,每一个对象,都对应着一个名字,这个对象指向一个对象的内存空间。
方法的调用:
1,类名 . 方法名(对象名)那么方法中的self参数就指向这个对象。
2,对象名.方法名() 这样写相当于方法中的self参数直接指向这个对象。