• 初识面向对象


    一、类

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

    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来使用组合类中的所有方法
  • 相关阅读:
    [转]jQuery知识总结
    sqlserver2008 函数1
    使用触发器生成流水号
    日期格式
    数据库正在使用,删除不了的问题
    continue 语句
    逻辑语句和函数
    ASP.NET中的随机密码生成
    相对路径
    “基类包括字段,但其类型与控件的类型不兼容”的解决方法
  • 原文地址:https://www.cnblogs.com/z-x-y/p/9179334.html
Copyright © 2020-2023  润新知