面向对象二

'''
一、类的实例化:
调用类产生对象的过程称之为实例化,实例化的结果称之为一个对象,或者一个实例。
'''
# 示例:
"""
现实中的对象:
对象1
特征:
名字:冯提莫
年龄:25
性别:female

技能:
抱抱
kiss

对象2
特征:
名字:林志玲
年龄:33
性别:female
技能:
抱抱
kiss
"""
# 1、程序中的类
# class Goddess:
# def __init__(self,name,age,sex):
# self.name=name
# self.age=age
# self.sex=sex
# def skill(self,kiss,embrace):
# self.kiss=kiss
# self.embrace=embrace
# print('大发 %s,%s你了'%(self.name,self.kiss))
# ftm=Goddess('冯提莫',25,'female')
# print(ftm.name,ftm.age,ftm.sex)
# ftm.skill('kiss',None)
# lzl=Goddess('林志玲','33','female')
# lzl.skill('kiss',None)
#实例化做了三件事
#1、先产生一个空对象
#2、自动触发类内部__init__函数的执行
#3、将空对象,以及调用类括号内传入的参数,一同传给__init__,为对象定制独有的属性
# obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')

# 会产生对象的名称空间,如何查看
# print(obj.__dict__)


#二;对象的操作
# print(obj.name) #obj.__dict__
# obj.education='哈佛'
# del obj.name
# obj.age=19
# print(obj.__dict__)


#三:对象属性的查找顺序:先找对象自己的名称空间----》类的名称空间
# class People:
# x=1
# def __init__(self,name,age,sex):
# self.name=name
# self.age=age
# self.sex=sex
#
# def run(self): #self=obj
# print('%s is running' %self.name) #obj.name
#
# obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')
# obj1=People('egon1',18,'male') #People.__init__(obj,'egon',18,'male')
# obj2=People('egon2',18,'male') #People.__init__(obj,'egon',18,'male')

#1、类的数据属性:是给对象用的,而且直接共享给所有对象用的,内存地址都一样
# print(People.x)
# People.x=11111

# print(id(People.x),People.x)
# obj.x='obj================》'
# print(id(obj.x),obj.x)
# print(id(obj1.x),obj1.x)
# print(id(obj2.x),obj2.x)


#2、类的函数属性:也是给对象用,但是绑定给对象用的,绑定到不同的对象就是不同的
#绑定方法,内存地址都不一样,但其实只想都是同一个功能
# print(People.run) #<function People.run at 0x00000226E7C78A60>
# People.run(123123)
# People.run(obj)

# print(obj.run)
# print(obj1.run)
# print(obj2.run)

#四:绑定方法的特殊之处:
#1、 绑定给谁就应该由谁来调用,
#2、谁来调用就会把谁当做第一个参数传入
# class People:
# x=1
# def __init__(self,name,age,sex):
# self.name=name
# self.age=age
# self.sex=sex
#
# def run(self): #self=obj
# print('%s is running' %self.name) #obj.name
#
# def f1():
# print('from f1')
#
# def f2(self):
# pass

# obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')
# obj1=People('egon1',18,'male') #People.__init__(obj,'egon',18,'male')
# obj2=People('egon2',18,'male') #People.__init__(obj,'egon',18,'male')
#
# obj.run()
# obj1.run()
# obj2.run()

# print(People.f1)
# People.f1()
# print(obj.f1)
# obj.f1() #People.f1(obj)


#五:一切皆对象:在python3中统一了类与类型的概念,类即类型
# l=list([1,2,3])
# print(type(l))

# print(type(obj))

# l.append(4)

小游戏:
人狗大战

class People:
def __init__(self,name,aggresivity,life_value=100):
self.name=name
self.aggresivity=aggresivity
self.life_value=life_value
def bite(self,enemy):
enemy.life_value-=self.aggresivity
print("""
人【%s】 咬了一口狗 【%s】
狗掉血【%s】
狗还剩血量【%s】
"""%(self.name,enemy.name,self.aggresivity,enemy.life_value))
class Dog:
def __init__(self,name,dog_type,aggresivity,life_value):
self.name = name
self.dog_type=dog_type
self.aggresivity = aggresivity
self.life_value = life_value

def bite(self,enemy):
enemy.life_value -= self.aggresivity
print("""
狗【%s】 咬了一口人 【%s】
人掉血【%s】
人还剩血量【%s】
【%s】挂掉了
""" % (self.name, enemy.name, self.aggresivity, enemy.life_value,enemy.name))
p1=People('小春',50)
d1=Dog('旺财','哈士奇',100,100)
p1.bite(d1)
d1.bite(p1)


posted @ 2018-04-11 15:18  yangweiwe  阅读(126)  评论(0编辑  收藏  举报