#面向对象引入的例子
def Person(name,blood,aggr,sex):
person = {
'name':name,
'blood':blood,
'aggr':aggr,
'sex':sex
}
def attack(dog): # 人打狗
dog['blood'] -= person['aggr']
print('%s被%s打了,掉血%s' % (dog['name'], person['name'], person['aggr']))
person['attack'] = attack
return person
def Dog(name,blood,aggr,sex):
dog = {
'name':name,
'blood':blood,
'aggr':aggr,
'sex':sex
}
def bite(person): # 狗咬人
person['blood'] -= dog['aggr']
print('%s被%s咬了,掉血%s' % (person['name'], dog['name'], dog['aggr']))
dog['bite'] = bite
return dog
p = Person('小姚',1000,20,'女')
d = Dog('cola',500,10,'不详')
print('人:',p)
print('狗:',d)
p['attack'](d)
print(d)
d['bite'](p)
print(p)
结果:
人: {'name': '小姚', 'blood': 1000, 'aggr': 20, 'sex': '女', 'attack': <function Person.<locals>.attack at 0x02518BB8>}
狗: {'name': 'cola', 'blood': 500, 'aggr': 10, 'sex': '不详', 'bite': <function Dog.<locals>.bite at 0x02518C00>}
cola被小姚打了,掉血20
{'name': 'cola', 'blood': 480, 'aggr': 10, 'sex': '不详', 'bite': <function Dog.<locals>.bite at 0x02518C00>}
小姚被cola咬了,掉血10
{'name': '小姚', 'blood': 990, 'aggr': 20, 'sex': '女', 'attack': <function Person.<locals>.attack at 0x02518BB8>
舒适面向对象
对象= 类名()
过程:
类名() 首先会创造出一个对象,创建了一个self对象
调用__init__(),类名括号里的参数会被这里接收
执行__init__()
返回self
对象能做的事儿:
查看属性
调用方法
__dict__对于对象的增删改查都可以通过字典的语法进行
类名能做的事情:
实例化
调用方法:只不过要自己传递self参数
调用类中的属性
__dict__对于类中的名字只能看,不能操作
class Person:
country = 'China' #创造了一个只要是这个类就一定有的属性,即类属性,静态属性
#__init__函数不需要return语句,self会自动的作为返回值
def __init__(self,*args): #self就是一个可以存储很多属性的大字典,不过是往字典里面添加属性的方法发生了变化
# print(self.__dict__)
self.name = args[0]
self.blood = args[1]
self.aggr = args[2]
self.sex = args[3]
# print(self.__dict__)
# print(id(self))
def walk(self,n):
print('%s走走走,走了%s步'%(self.name,n))
p = Person('小姚',1000,20,'女') #alex对象 #实例化
Person.walk(p,5) #用类名调用方法---类名.方法名(对象名)
p.walk(5) #同Person.walk(p) #用对象调用方法
print(p.__dict__) #查看所有属性
print(id(p))
print(p.sex) #查看特定属性
print(Person.country) #结果:China
print(Person.__dict__['country']) #结果:China
print(p.__dict__['aggr']) #结果:20
# 改信息
p.name = '夏夏'
print(p.__dict__) #结果:{'name': '夏夏', 'blood': 1000, 'aggr': 20, 'sex': '女'}
p.__dict__['name'] = '夏夏'
print(p.__dict__) #结果:{'name': '夏夏', 'blood': 1000, 'aggr': 20, 'sex': '女'}
# 增加属性
p.age = 23
print(p.__dict__) #结果:{'name': '小姚', 'blood': 1000, 'aggr': 20, 'sex': '女', 'age': 23}
Person.__dict__['country'] = '印度' #报错,类属性不可修改