• Python学习第10天:类与对象


    1 基本概念

    1.1 面向对象

    面向对象是一种抽象,是一种用分类的方式看待问题的方法,用 Java 的编程思想来说就是:万物皆对象;面向对象有三大特性:封装、继承、多态。

    1.2 类

    上面说了面向对象是一种用分类的方式看待问题的方法,一个分类就是一个类,可以把类看作是一个抽象的模板,如:Car 类。

    1.3 对象

    对象是根据类创建出来的一个个实例。

    2 基本使用

    2.1 类的定义

    # 类的定义
    class Car:    
        pass
    
    • 1
    • 2
    • 3

    2.2 对象的创建

    # 创建 Car 的实例对象 c
    class Car: 
        pass	
        
    c = Car()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3 类中定义属性

    # 定义 Car 类的属性 name
    class Car:    
        name = 'BMW'
    
    • 1
    • 2
    • 3

    3 类中的方法

    3.1 内置方法

    Python 创建任何一个类的时候,都会包含一些内置的方法,主要包括如下:

    方法说明
    __init__构造函数,在生成对象时调用
    __del__析构函数,释放对象时使用
    __repr__打印,转换
    __setitem__按照索引赋值
    __getitem__按照索引获取值
    __len__获得长度
    __cmp__比较运算
    __call__函数调用
    __add__加运算
    __sub__减运算
    __mul__乘运算
    __div__除运算
    __mod__求余运算
    __pow__乘方

    3.2 自定义方法

    Python 有三种常见的方法,分别为:实例方法、类方法、静态方法,这三种方法都定义在类中。

    3.2.1 类方法

    类方法是将类本身作为对象进行操作的方法。

    定义与使用

    '''
    类方法(可调类变量、可被实例调用、可被类调用)
    1、类方法通过@classmethod装饰器实现,只能访问类变量,不能访问实例变量;
    2、通过cls参数传递当前类对象,不需要实例化。
    '''
    class Car(object):    
        name = 'BMW'    
        def __init__(self, name):        
            self.name = name    
        @classmethod    
        def run(cls,speed):        
            print(cls.name,speed,'行驶')
            
        # 访问方式1
        c = Car("宝马")
        c.run("100迈")
        # 访问方式2
        Car.run("100迈")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    3.2.2 静态方法

    静态方法是类中的函数,不需要实例。

    定义与使用

    '''
    静态方法(可调类变量、可被实例调用、可被类调用)
    1、用 @staticmethod 装饰的不带 self 参数的方法;
    2、静态方法名义上归类管理,实际中在静态方法中无法访问类和实例中的任何属性;
    3、调用时并不需要传递类或实例。
    '''
    class Car(object):    
        name = 'BMW'    
        def __init__(self, name):        
            self.name = name    
        @staticmethod    
        def run(speed):        
            print(Car.name,speed,'行驶')	
            
    # 访问方式1
    c = Car("宝马")
    c.run("100迈")
    # 访问方式2
    Car.run("100迈")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    3.2.3 实例方法

    实例方法就是类的实例能够使用的方法。

    定义与使用

    # 实例方法(可调类变量、可调实例变量、可被实例调用)
    # 第一个参数强制为实例对象 self。
    class Car(object):    
        name = 'BMW'    
        def __init__(self, name):        
            self.name = name    
        def run(self,speed):        
            print(self.name,speed,'行驶')
            
    # 访问
    c = Car("宝马")
    c.run("100迈")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4 类的继承

    定义与使用

    # 基本语法:class ClassName(BaseClassName)
    # 父类
    class Car(object):    
        name = 'BMW'    
        def __init__(self, name):        
            self.name = name    
        def run(self,speed):        
            print(self.name,speed,'行驶')        
            
    # 子类
    class BMWCar(Car):    
        conf = "经济适用型"    
        pass
        
    # 调用父类 Car 中 run 方法
    bc = BMWCar("BMW经济适用型轿车")
    bc.run("100迈")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    5 类的多态

    定义与使用

    # 父类
    class Car(object):    
        name = 'BMW'    
        def __init__(self, name):        
            self.name = name    
        def run(self,speed):        
            print('Car-->',self.name,speed,'行驶')
            
    # 子类1
    class BMWCar(Car):    
        def run(self,speed):        
            print('BMWCar-->',self.name,speed,'行驶')
            
    # 子类2
    class SVWCar(Car):    
        def run(self,speed):        
            print('SVWCar-->',self.name,speed,'行驶')
            
    # 调用 run 方法
    c = Car("Car")
    c.run("120迈")
    
    bc = BMWCar("宝马")
    bc.run("100迈")
    
    sc = SVWCar("大众")
    sc.run("80迈")
    
    # 输出结果
    '''
    Car--> Car 120迈 行驶
    BMWCar--> 宝马 100迈 行驶
    SVWCar--> 大众 80迈 行驶
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在上面的例子中,我们可以看出:c、bc 、sc 是不同类型的对象,在它们调用 run 方法时,调用的均是各自类中的方法,这就是多态。

  • 相关阅读:
    配置接口策略路由
    C++模拟题[第一周-T1] 扑克
    重入攻击和 DAO 被黑事件
    校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序
    准备前工作
    堆栈队列应用
    idea中删除断点与删除所有断点
    Medium: 9 Important Things to Remember for AB Test
    基于springboot广场舞团高校社团管理系统设计与实现-计算机毕业设计源码和LW文档
    Java集合概述
  • 原文地址:https://blog.csdn.net/weixin_43953518/article/details/126329019