码迷,mamicode.com
首页 > 其他好文 > 详细

初识面向对象

时间:2018-06-13 21:07:40      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:引用   直接   就是   eth   名称空间   品种   名称   文档   print   

一、类

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

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

 

初识面向对象

标签:引用   直接   就是   eth   名称空间   品种   名称   文档   print   

原文地址:https://www.cnblogs.com/z-x-y/p/9179334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!