一、类
类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体
1、类的创建
# 声明类 """ class 类名: '类的文档字符串' 类体 """ # 创建一个人类,定义它的属性roles,方法walk class Person: role='person' def walk(self): print('person is walking……')
2、类的作用
类的两个作用:属性引用和实例化
属性引用
属性引用 类名.属性
class Person: #定义一个人类 role = 'person' #人的角色属性都是人 def walk(self): #人都可以走路,也就是有一个走路方法 print("person is walking...") print(Person.role) #查看人的role属性 print(Person.walk) #引用人的走路方法,注意,这里不是在调用
实例化
类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征
class Person: #定义一个人类 role = 'person' #人的角色属性都是人 def __init__(self,name): self.name = name #每一个角色都有自己的昵称; def walk(self): #人都可以走路,也就是有一个走路方法 print("person is walking...") print(Person.role) #查看人的role属性 print(Person.walk) #引用人的走路方法,注意,这里不是在调用
二、对象
对象是由类创建,即实例化
1、实例化
语法:对象名=类名(参数)
alex = Person('Alex') #实例化 执行过程: 类名()就等于在执行Person.__init__() 执行完__init__()就会返回一个对象。这个对象类似一个字典,存着属于这个人本身的一些属性和方法。 你可以偷偷的理解:alex = {'name':'alex','walk':walk} 查看属性和调用方法: print(alex.name) #查看属性直接 对象名.属性名 print(alex.walk()) #调用方法,对象名.方法名()
三、对象之间的交互
现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人
现在我们要在创建一个狗类,狗就不能打人了,只能咬人,所以我们给狗一个bite方法
有了狗类,我们还要实例化一只实实在在的狗出来
然后人和狗就可以打架了。现在我们就来让他们打一架吧
1、创建一个狗类
class Dog: # 定义一个狗类 role = 'dog' # 狗的角色属性都是狗 def __init__(self, name, breed, aggressivity, life_value): self.name = name # 每一只狗都有自己的昵称; self.breed = breed # 每一只狗都有自己的品种; self.aggressivity = aggressivity # 每一只狗都有自己的攻击力; self.life_value = life_value # 每一只狗都有自己的生命值; def bite(self,people): # 狗可以咬人,这里的狗也是一个对象。 # 狗咬人,那么人的生命值就会根据狗的攻击力而下降 people.life_value -= self.aggressivity
2、实例化一只实实在在的二哈
ha2 = Dog('二愣子','哈士奇',10,1000)
3、交互egon打ha2一下
print(ha2.life_value) #看看ha2的生命值 egg.attack(ha2) #egg打了ha2一下 print(ha2.life_value) #ha2掉了10点血 输出结果: 1000 990
四、类命名空间与对象、实例的命名空间
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性或方法
属性就是直接在类中定义的变量
方法就是定义在类中的方法
其中类的数据属性是共享给所有对象的
>>>id(alex.role) 4341594072 >>>id(Person.role) 4341594072
而类的动态属性是绑定到所有对象的
>>>alex.attack <bound method Person.attack of <__main__.Person object at 0x101285860>> >>>Person.attack <function Person.attack at 0x10127abf8>
五、面向对象的组合用法
组合指的是在一个类中以另外一个类的对象作为数据属性,称为类的组合
class Weapon: def prick(self, obj): #这是该装备的主动技能,扎死对方 obj.life_value -= 500 #假设攻击力是500 class Person: role = 'person' #人的角色属性都是人 def __init__(self, name): self.name = name #每一个角色都有自己的昵称; self.weapon = Weapon() #给角色绑定一个武器; alex = Person('alex') alex.weapon.prick() #alex组合了一个武器的对象,可以直接alex.weapon来使用组合类中的所有方法