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'] = '印度'       #报错,类属性不可修改

  

原文地址:https://www.cnblogs.com/Cheryol/p/9778331.html