1.对象是关于类而实际存在的一个例子,即实例
#类实例化得到g1这个实例
class Garen:
camp=‘Demacia‘
def __init__(self,nickname,aggressivity=58,life_value=455):
self.nickname=nickname #为自己的盖伦起个别名;
self.aggressivity=aggressivity #英雄都有自己的攻击力;
self.life_value=life_value #英雄都有自己的生命值;
def attack(self,enemy):
print("attack %s" % enemy)
g1=Garen(‘草丛伦‘)
1.1 对象的属性引用和绑定方法
(1)对象(实例)只有一种作用:属性引用
格式: 实例名.类的变量名
实例名.绑定方法
实例名.实例自己的变量名
print(g1.nickname)
print(g1.aggressivity)
print(g1.life_value)
输出结果为:
草丛伦
58
455
(2)对象的属性操作
查看属性信息
print(g1.nickname)
输出结果:
草丛伦
修改属性信息
g1.nickname="伦哥"
print(g1.nickname)
输出结果为:
伦哥
添加属性
g1.sex="female"
print(g1.sex)
输出结果为:
Female
删除属性:
del g1.sex
print(g1.sex)
输出结果为:
AttributeError: ‘Garen‘ object has no attribute ‘sex‘ #报错
(3)查看实例属性
同样是dir和内置__dict__两种方式
特殊实例属性
__class__
__dict__
(4)对象(实例)的绑定方法
对象本身只有数据属性,但是python的class机制会将类的函数绑定到对象上,称为对象的方法,或者叫绑定方法。
print(g1.attack) #对象的绑定方法
print(Garen.attack) #对象的绑定方法attack本质就是调用类的函数attack的功能,二者是一种绑定关系
输出结果为:
<bound method Garen.attack of <__main__.Garen object at 0x00000017370815F8>>
<function Garen.attack at 0x0000001737085048>
对象的绑定方法的特别之处在于:obj.func()会把obj传给func的第一个参数
1.2 对象的交互
仿照Garen类创建一个Riven类:
实例Riven类
交互:瑞雯攻击草丛伦
class Riven:
camp=‘Noxus‘
def __init__(self,nickname,aggressivity=54,life_value=414):
self.nickname=nickname #为自己的瑞雯起个别名;
self.aggressivity=aggressivity #英雄都有自己的攻击力;
self.life_value=life_value #英雄都有自己的生命值;
def attack(self,enemy):
print("attack %s" % enemy)
enemy.life_value -= self.aggressivity
g1=Garen(‘草丛伦‘)
r1=Riven(‘瑞雯‘)
print(g1.life_value)
r1.attack(g1)
print(g1.life_value)
输出结果为:
455
瑞雯 attack 草丛伦
401