初识面向对象

一、类

类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体

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来使用组合类中的所有方法

 

posted @ 2018-06-13 19:11  Operater  阅读(218)  评论(0编辑  收藏  举报