美文网首页
2018-09-06-day14-类和对象

2018-09-06-day14-类和对象

作者: rzlong | 来源:发表于2018-09-06 20:39 被阅读0次

    类和对象

    理论上的定义
    类: 拥有相同功能和相同属性的对象的集合(类是抽象的)
    对象: 类的实例(对象是具体的)

    生活角度
    车是一个类,具体的车是一个对象

    编程方式
    面向过程编程: 以算法为工具
    函数式编程: 以函数为工具
    面向对象编程: 以类和对象为工具

    类的声明

    类是对相同功能和相同属性的封装
    封装效果:一个类中可以对多个功能封装(多个函数)

    类的声明格式

    class 类名(父类列表):
        类的内容
    
    class -- 声明类的关键字
    类名 -- 标识符,不能是关键字。驼峰式命名:单词首字母大写,其他字母小写
    劫 -- 瞬狱影杀阵
    父类列表:可以同时继承多个类,也可以省略表示继承基类
    类的内容:包含类的方法和属性
    

    方法

    • a.对象方法: 对象方法需要通过对象来调用,对象.函数名()。直接写在类中的方法,自带一个self参数。
    • b.类方法
    • c.静态方法

    创建对象

    • 创建类的时候,系统会默认给我们创建这个类对应的构造方法。
    • 构造方法: 类名() 创建类对应的对象
      案例
    class Person():
        def __init__(self,name):
            self.name = name
        def eat(self):
            print('吃饭啦')
        def sleep(self):
            print('睡觉啦')
        def talk(self):
            print(self.name + '说:我心目中的英雄是盖世压缩,我希望有一天他能eq二连闪现来娶我\n\n\n\n的狗命')
    
    if __name__ == '__main__':
        #创建对象
        lvnaixin = Person('lvnaixin')
        #调用对象方法 对象名.对象方法
        lvnaixin.eat()
        lvnaixin.sleep()
        lvnaixin.talk()
        #只有调用构造方法的时候才会产生新的对象
        xiaolv = lvnaixin
        #一个类可以声明多个对象
        limeng = Person('limeng')
        limeng.talk()
    
        print(id(lvnaixin),id(xiaolv),id(limeng))
    
    result:
    吃饭啦
    睡觉啦
    lvnaixin说:我心目中的英雄是盖世压缩,我希望有一天他能eq二连闪现来娶我
    
    
    
    的狗命
    limeng说:我心目中的英雄是盖世压缩,我希望有一天他能eq二连闪现来娶我
    
    
    
    的狗命
    40000432 40000432 40001168
    
    yasuo.jpg

    构造方法和init方法

    1.构造方法: 系统自动创建的方法。方法名和类名一样,从而创建对象。
    2.__init__方法: 其功能是初始化和添加对象属性。

    当我们通过构造方法去创建对象的时候,系统会自动调用__init__方法去初始化对象属性。

    • 案例
    class Dog:
        #init方法可以添加参数
        def __init__(self,name,sex,id='10086'):
            self.age = '10'
            self.sex = sex
            self.name = name
            print('Dog的id是:%s' % id)
        def play(self):
            print('%s是%s狗,%s岁了.' % (self.name,self.sex,self.age))
    if __name__ == '__main__':
        # 创建对象的过程: 在内存中开辟空间创建一个对象,对象再调用init方法,初始化对象的属性再返回。
        bigwhite = Dog('bigwhite','母')
        bigwhite.play()
    
    result:
    Dog的id是:10086
    bigwhite是母狗,10岁了.
    
    bigwhite.jpg

    对象属性和对象方法

    对象属性

    • 对象的属性 - 不同的对象对应的值可能不一样
      类中的对象属性是声明在init方法中,并且声明格式为: self.属性名 = 初值
      对象属性的使用: 对象.属性名
    • 类的字段 - 属于类的,所有的对象对应的值是一样的

    对象方法

    • 写在类中的所有方法是对象方法
    • 对象方法的调用 -- 对象.对象方法()
    • 对象方法中默认参数self,不需要传递此参数。它是用来指定某个属性而使用的。
    • 案例
    import math
    class Circle:
        def __init__(self,radius):
            self.radius = radius
    
        # self可以看成当前类的一个对象,和使用类创建一个对象是一个性质的.
        def circumference(self):
            print(self.area())
            return '圆的周长:%.2f' % (2*math.pi*self.radius)
    
        def area(self):
            print(id(self))
            return '圆的面积:%.2f' % (math.pi*self.radius**2)
    
    if __name__ == '__main__':
        circle2 = Circle(5)
        print(id(circle2))
        print(circle2.circumference(),circle2.area())
    
    result:
    9041072
    9041072
    圆的面积:78.54
    9041072
    圆的周长:31.42 圆的面积:78.54
    

    对象属性增删查改

    python是动态语言,对象的属性可以进行增加和删除的操作

    查看属性

    • 对象.属性
    • getattr(object,attr,default=None)若没有该属性,就使用默认值
    • __getattribute__(attr)

    修改属性

    • object.attr = value
    • setattr(object,attr,value) 可设置默认值
    • object.__setattr__(attr,value) 可设置默认值

    添加属性
    同修改属性相比,当对象的属性不存在的时候,就添加属性

    删除属性

    • del object.attr
    • delattr(object,attr)
    • object.__delattr__(attr)

    类的字段

    类的属性就是类的字段
    类的字段就是声明在类的里面,方法是外面的变量
    当在类的所有对象,关于其值是共有的情况下,使用类的字段
    使用方式: 类.类的字段

    • 案例
    # 写一个类,用一个属性来保存创建对象的个数
    class P:
        count = 0#类的字段
        def __init__(self):
            P.count += 1
    

    类的方法

    对象方法(实例)

    • 特点:直接声明在类中,自带self参数的方法。谁来调用指向谁,self始终指向当前对象。
    • 调用:通过对象来调用 对象.对象方法()

    类方法

    • 声明的形式:声明方法前使用 @classmethod 说明
    • 特点:调用时不需要传值,自带cls参数。谁来调用指向谁,cls始终指向当前类。
    • 调用:通过类来调用, 类.类方法()

    静态方法

    • 声明的形式:声明方法前使用 @staticmethod 说明
    • 特点:没有默认的参数
    • 调用:通过类来调用 类.静态方法

    如何选择

    • 基础上:实现方法的功能需要用到对象的属性,使用对象方法;否则使用静态方法或类方法。
    • 不使用对象方法的前提下,如果实现方法的功能需要用到类的字段就使用类方法
    • 实现功能既不需要对象的属性,又不需要类的字段就使用静态方法。注意: 静态方法和类方法划分不严格。
    • 案例
    class Funcs:
        number = 10
        # 声明一个对象方法
        def object_func(self):
            print('此处是对象方法')
        # 声明一个类方法
        @classmethod
        def class_func(cls):
            func2 = cls()
            func2.object_func()
            print('此处是类方法')
            print(cls.number)
            cls.static_func()
    
        # 声明一个静态方法
        @staticmethod
        def static_func():
            print('此处是静态方法')
    

    相关文章

      网友评论

          本文标题:2018-09-06-day14-类和对象

          本文链接:https://www.haomeiwen.com/subject/kosxgftx.html