面向对象
一、类的实例化:调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或称为一个实例
class People:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def run(self):
print('%s is running'%self.name)
实例化做了三件事
1、先产生一个空对象
2、自动触发类内部__init__函数的执行
3、将空对象,以及调用类括号内传入的参数,一同传给__init__,为对象定制独有的属性
obj=People('egon',18,'male')=====>People.__init__(obj,'egon',18,'male')
会产生对象的名称空间,如何查看
print(obj._dict__)
二、对象的操作
1、查 print(obj.name)
2、增obj.education='aa'
3、删del obj.name
4、改obj.age=19
三、对象属性的查找顺序:先找对象自己的名称空间===>类的名称空间
class People:
x=1
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def run(self):
print('%s is running'%self.name)
obj=People('egon',18,'male')
obj1=People('egon1',18,'male')
obj2=People('egon2',18,'male')
类的数据性性:是给对象用的,而且直接共享给所有对象用的,内存地址都一样
print(People,x)
People.x=11111
2、类的函数性性:也是给对象用,但是绑定给对象用的,绑定到不同的对象就是不同的
绑定方法,内存地址都不一样,但其实只是同一个功能
四:绑定方法的特殊之处:
1、绑定给谁就应该由谁来调用,
2、谁来调用就会把谁当做第一个参数传入
class People:
x=1
def__init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def run(self):
print('%s is running'%self.name)
def f1(self):
print('from f1')
def f2(self):
pass
obj=People('egon',18,'male')
五:一切皆对象:在python3中统一了类与类型的概念,类即类型
l=lise([1,2,3])
print(type(l))
<class 'list'>
人狗大战
class People:
def __init__(self,name,act,life_value=100):
self.name=name
self.act=act
self.life_value=life_value
def bite(self,enemy):
enemy.life_value-=self.act
print('''
人[%S]咬了一口狗[%s]
狗掉血[%s]
狗还剩血量[%s]'''%(self,name,enemy.name,self.act,enemy.life_value) )
class Dog:
def__init__(self,name,dog_type,act,life_value):
self.name=name
self.dog_type=dog_type
self.act=act
self.life_value=life_value
def bite(self,enemy):
enemy.life_value-=self.act
print('''
狗[%s]咬了一口人)
人掉血[%s]
人还剩血量[%s]'''%(self.name,enemy.name,self.act,enemy.life_value))
p1=People('lige',60)
d1=Dog('bb','cc',200,200)
p1.bite(d1)
d1.bite(p1)