10-12 面向对象初级
#面向对象引入的例子
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'] = '印度' #报错,类属性不可修改