初识面向对象
面向对象
面向对象编程 是一种思想
对象就是具体的拥有准确属性值的一些变量
类:一类具有相同属性和方法的事物
类的定义 class关键字 类名的首字母大写
类中直接定义属性:静态属性(变量) 和动态属性(函数)
类名的两个作用:属性引用,实例化对象
类和属性的操作:类名.属性名 类名.__dict__['属性名'](不能修改)
class Person: # 类名有两个作用 country = '中国' # 静态属性、数据属性 def __init__(self,life_value,aggr,name,job): # 初始化方法 self.lv = life_value # 属性,对象属性 self.aggr = aggr self.name = name self.job = job def walk(self): # 动态属性、函数属性、方法 print('%s is walking'%self.name)
属性引用
print(Person.walk) # print(Person.walk()) # 报错 少参数 print(Person.__dict__) print(Person.__dict__['country']) # 中国 # Person.__dict__['country'] = '印度' # 报错 不能改变 print(Person.country) # 中国 静态属性的查看 Person.role = '人' # 添加一个新静态属性 print(Person.role) # 人 del Person.role # 删除一个静态属性 Person.country = '印度' # 修改一个静态属性 print(Person.country) # 印度
实例化对象
实例化:从一个类中创造一个具体的对象的过程
print(callable(Person)) # True p = Person() print(p) # <__main__.Person object at 0x00000000028CD198> Person的对象
实例化——类名(参数)
构造方法:造对象
初始化:给这个对象添加一些属性 __init__
返回了一个初始化之后的对象
如何让对象拥有具体的属性
__init__方法:初始化方法,可以没有,给对象添加一些必要的基础属性
self的含义:就是这个对象本身
p = Person(1000,2,'金老板','boss') print(p.lv) # 1000 print(p.aggr) # 2 print(p.name) # 金老板 print(p.job) # boss print(p.__dict__) # {'lv': 1000, 'aggr': 2, 'name': '金老板', 'job': 'boss'} print(p.__dict__['lv']) # 1000 p.__dict__['lv'] = 998 # 对象名.__dict__中的属性值可以被修改 print(p.__dict__['lv'],p.lv) # 998 998 p.__dict__['sex'] = 'ladyboy' # 对象名.__dict__中的属性值可以增加 print(p.sex) # ladyboy p.__dict__.pop('sex') # 对象名.__dict__中的属性值可以被删除 p.sex = 'ladyboy' # 添加一个属性 print(p.sex) p.sex = 'girl' # 属性的修改 del p.sex # 删除一个属性 # 对象和属性的操作:对象名.属性名 对象名.__dict__['属性名'] # Person.walk(p) # 金老板 is walking p.walk() # Person.walk(p)
面向对象交互
简单的人狗大战
class Person: def __init__(self,life_value,aggr,name,job): self.name = name self.aggressive = aggr self.life = life_value self.job = job def attack(self,dog_obj): print('%s 攻击了 %s'%(self.name,dog_obj.name)) dog_obj.life = dog_obj.life - self.aggressive class Dog: def __init__(self,life_value,aggr,name,kind): self.life = life_value self.aggressive = aggr self.name = name self.kind = kind def bite(self,person): print('%s 攻击了 %s'%(self.name,person.name)) person.life = person.life - self.aggressive dog = Dog(1000,100,'铁蛋','土狗') boss_gold = Person(100,2,'太黑','old_driver') boss_gold.attack(dog) print(dog.life) dog.bite(boss_gold) print(boss_gold.life)