一、类
先看一段代码:
class Person: animal = '高级动物' walk_way = '直立行走' # 静态属性,静态变量,静态字段 language = '语言' def __init__(self,name,age,work): # 函数 动态属性,方法 # print(self) self.name = name self.age = age self.work = work def eat(self): print('吃吃') def work(self): print('工作') obj = Person('alex',25,'it')
class: 类 Person:类名
类:具有相同属性或者功能的一类实物
对象:对象是类的具体体现。
# 结构上理解:面向对象分两个部分,静态属性 动态属性 (属性、方法)
特点:
(1)函数封装一个功能,而面向对象封装多个相关的功能
(2)面向对象是抽象的,它是一种思想,站在上帝的角度去理解他
(3)程序可扩展,对象都是一个个独立的。耦合性,差异性。
类名:
(1)查看类中的所有属性及方法:__dict__
print(Person.__dict__)
print(Person.__dict__['animal']) # 单独查看某个属性
# 工作中,一般只会用__dict__查看类中的所有属性,不进行其他操作
(2)查看(增删改)类中某个,某些属性,用万能的点'.'
# print(Person.animal) # 查
# Person.name = 'alex' # 增 改
# print(Person.name)
# del Person.walk_way # 删
# print(Person.__dict__)
(3) 函数的操作方法。一般不通过类名来操作
Person.work(666) # 可以操作函数
二、对象
先看代码:
class Person: animal = '高级动物' walk_way = '直立行走' language = '语言' def __init__(self,name,age,work): # print(self) self.name = name self.age = age self.work = work def eat(self): print('吃吃') def work(self): print('工作') obj = Person('alex',25,'it') # 这是一个实例化过程,实例化一个内存空间(即对象空间) # print(obj) # print(obj.age) # print(obj.work) # print(obj.name) obj.hobby = 'tesla' print(obj.__dict__) obj.name = 'Chris' print(obj.__dict__) del obj.work print(obj.__dict__) obj.animal = '低等动物' print(obj.__dict__) # 给对象添加了animal的属性 print(Person.__dict__) print(obj.animal) print(Person.animal) # print(obj) obj.eat()
# 对象
# 对象操作对象空间
#查看所有属性__dict__
# print(obj.__dict__) #
# 对对象的某个属性 增删改查 万能的点
obj.hobby = 'tesla' # 增
obj.name = 'Chris' # 改
del obj.work # 删
print(obj.name) # 查
类执行的过程图
三、组合
先看代码:
class Gamerole: def __init__(self,nickname,ad,hp): self.nickname = nickname self.ad = ad self.hp = hp def equip_weapon(self, w): # 给人物封装了一个武器属性,这个属性值是Weapon的一个对象 self.equip_weapon = w # 组合 class Weapon: def __init__(self,name,ad): self.name = name self.ad = ad def fight(self,role1,role2): # 此时的self为武器的内存地址 role2.hp = role2.hp - self.ad - role1.ad # 此时 role1、role2分别为p1、p2 print('%s 用 %s 攻击了%s, %s掉了%s血,还剩%s血' %(role1.nickname,self.name,role2.nickname,role2.nickname,self.ad + role.ad,role2.hp)) p1 = Gamerole('盖伦',20,500) p2 = Gamerole('剑豪',100,200) w1 = Weapon('大宝剑',30) w2 = Weapon('武士刀',80) p2.equip_weapon(w2) p2.equip_weapon.fight(p2,p1)
结果为:
剑豪 用 武士刀 攻击了盖伦, 盖伦掉了180血,还剩320血
插入解释图片: