面向对象核心是:对象
对象是一系列特征与技能的结合体
优点:可扩展性强
缺点:编写复杂
如何创建对象?先学会定义类
什么是类?
存放多个对象相同数据功能的容器
如何定义类
关键字:class
名字采用驼峰体,类代码执行之后产生的名字放到名名称空间
使用__dict__可以看到类,或对象内的名称空间
类的实例化——加括号调用,才能产生对象
调用类发生的事情:
1,会产生一个空对象的名称空间
2.会自动触发__init__,并将对象当做第一参数传入
3,会将调用括号内参数一并传给__init__()
查看类与对象的名称空间 .dict
类和对象的属性工作:增删改查
增:直接·加要增加关键字,之后复制符号=值
删:del People.country
改:对已存在的参数进行句点符调用,等号
查:句点符,print已有属性
类中的属性最终都是给对象使用,对象引用类中的属性指向的都是同一个内存地址
类中方法,def 也是给对象使用的,在调用类实例化的时候,会将对象当做第一参数传入,
对象属性的查找顺序,先从对象自己的名称空间找,————》再在类的名称空间查找
对象绑定的特殊:
1,会将对象当做第一个参数传入
2,若绑定方法中还有其他函数,一并出入
案例,人狗大作战——
class People:
def init(self,name,life,arg):
self.name= name
self.life = life
self.arg = arg
def bite(self,dog_obj):
print(f'{self.name}开始咬{dog_obj.name}')
dog_obj.life-=self.arg
print(f'{dog_obj.name}生命减掉{self.arg},还剩下血量{dog_obj.life}')
if dog_obj.life<=0:
print(f'{dog_obj.name}已经挂了')
return True
class Dog:
def init(self,name,life,dogtype,arg):
self.name = name
self.life = life
self.dogtype = dogtype
self.arg = arg
def bite(self,p_obj):
print(f'{self.name}开始咬人{p_obj.name}')
p_obj.life -=self.arg
print(f'{p_obj.name}生命值减到{p_obj.life},掉{self.arg}血')
if p_obj.life<=0:
print(f'{p_obj.name}已经挂')
return True
p1 = People('高弟', 2000, 500)
d1 = Dog('HCY', 250, '哈士奇', 2500)
p2 = People('高弟2', 5000, 50)
import time
while True:
# 开始人狗互咬
# if p1.life or d1.life:
res1 = d1.bite(p2)
if res1:
break
time.sleep(1)
res2 = p1.bite(d1)
if res2:
break
time.sleep(1)