当前位置: 首页 > article >正文

Python入门 — 类

面向对象编程中,编写表示现实世界中的事物和情景的(class),并基于这些类来创建对象(object)。根据类来创建对象称为实例化,这样就可以使用类的实例(instance)

一、创建类

class Dog:
    def __init__(self, name, age):
        """初始化属性 name 和 age"""
        self.name = name
        self.age = age
    def sit(self):
        """模拟小狗收到命令时坐下"""
        print(f"{self.name} 坐下")
    def roll_over(self):
        """模拟小狗收到命令时打滚"""
        print(f"{self.name} 打滚")

Dog 类创建的每个实例都将存储名字和年龄,而且每条小狗都有坐下(sit())和打滚(roll_over())的能力。

       __init__() 方法:类中的函数称为方法,__init__() 是一个特殊方法,每当根据 Dog 类创建新实例时,Python 都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,可以避免 Python 默认方法与普通方法发生名称冲突。务必确保 __init__() 的两边都有两个下划线,否则当你使用类来创建实例时,将不会自动调用这个方法。

       __init__() 方法定义成包含三个形参:self、name 和 age。在这个方法的定义中,形参 self 必不可少,而且必须位于其他形参的前面

       当 Python 调用这个方法来创建 Dog 实例时,将自动传入实参 self。每个与实例相关联的方法调用都会自动传递实参 self,该实参是一个指向实例本身的引用,让实例能够访问类中的属性和方法。当我们创建 Dog 实例时,Python 将调用 Dog 类的 __init__() 方法。我们将通过实参向 Dog() 传递名字和年龄;self 则会自动传递,不需要我们来传递。

       在 __init__() 方法内定义的两个变量都有前缀 self 。以 self 为前缀的变量可供类中的所有方法使用,可以通过类的任意实例来访问。self.name = name 获取与形参 name 相关联的值,并将其赋给变量 name,然后该变量被关联到当前创建的实例。像这样可通过实例访问的变量称为属性。

       Dog 类还定义了另外两个方法:sit() 和 roll_over() 。由于这些方法执行时不需要额外的信息,因此只有一个形参 self。

二、创建实例

在上述创建类的基础上,我们可以根据类来创建类的实例

my_dog = Dog('LL', 3)

这样就创建好实例了,接下来可以使用它的方法和属性了。

1、访问属性

my_dog.age

2、调用方法

my_dog.sit()
my_dog.roll_over()

三、使用类和实例

1、创建时给定属性默认值

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.meter = 0   # 默认为0

    def update_meter(self, mile):
        self.meter = mile

2、修改属性的值

修改属性的值主要有三种方法:通过实例修改,通过方法设置,以及通过方法递增(增加特定的值)。

实例修改:

my_car = Car('aaa', 'a8', 2025)
my_car.meter = 100

# 实例 my_car 中找到属性 meter,并将其值设置为 100

方法修改:

my_car = Car('aaa', 'a8', 2025)
my_car.update_meter(200)

属性的值递增修改:也是使用实例的方法进行修改,可以试试。

四、继承

       要编写的类是一个既有的类的特殊版本,可使用继承。当一个类继承另一个类时,将自动获得后者的所有属性和方法。原有的类称为父类,而新类称为子类。子类不仅继承了父类的所有属性和方法,还可定义自己的属性和方法。

1、子类的 __init__() 方法

        在既有的类的基础上编写新类,通常要调用父类的 __init__() 方法。这将初始化在父类的 __init__() 方法中定义的所有属性,从而让子类也可以使用这些属性。

class Car:
    def __init__(self, make, model, year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.meter = 0

    def get_descriptive_name(self):
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

    def read_meter(self):
        print(f"这车开了 {self.meter} km")

    def update_meter(self, mile):
        if mile >= self.meter:
            self.meter = mile
        else:
            print("只能增加,不能减少的,孩子")

    def increment_meter(self, miles):
        self.meter += miles


class ElectricCar(Car):
    """电动汽车"""
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
        my_uu = ElectricCar('BYD', 'UU', 2025)
        print(my_uu.get_descriptive_name())

电动汽车是汽车的子类,具备 Car 类的所有功能。在定义子类时,必须在括号内指定父类的名称。__init__() 方法接受创建 Car 实例所需的信息,super() 是一个特殊的函数,让我们能够调用父类的方法。父类也称为超类

2、给子类定义属性和方法

class ElectricCar(Car):
    """电动汽车"""
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
        my_uu = ElectricCar('BYD', 'UU', 2025)
        print(my_uu.get_descriptive_name())
        # 新增属性
        self.battery_size = 40
        # 新增方法
    def describe_battery(self):
        print(f"电池容量为{self.battery_size}-kWh.")

3、重写父类中的方法

在子类中定义一个与要重写的父类方法同名的方法。这样,Python 将忽略这个父类方法,只关注在子类中定义的相应方法。

4、将实例用作属性

使用代码模拟实物时,你可能会发现自己给类添加了太多细节:属性和方法越来越多,文件越来越长。在这种情况下,可能需要将类的一部分提取出来,作为一个独立的类。将大型类拆分成多个协同工作的小类,这种方法称为组合。

class Car:
    #####


class Battery:
    def __init__(self, battery_size=75):
        """初始化电池的属性"""
        self.battery_size = battery_size

    def describe_battery(self):
        print(f"电池容量为-{self.battery_size}-kWh.")


class ElectricCar(Car):
    """电动汽车"""
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)

        my_uu = ElectricCar('BYD', 'UU', 2025)
        print(my_uu.get_descriptive_name())

        self.battery = Battery()

       定义了一个名为 Battery 的新类,在 ElectricCar 类中,添加一个名为 self.battery 的属性。这行代码让Python 创建一个新的 Battery 实例。当 __init__() 方法被调用时,都将执行该操作,因此现在每个 ElectricCar 实例都包含一个自动创建的 Battery 实例。


http://www.kler.cn/a/562540.html

相关文章:

  • SQL: DDL,DML,DCL,DTL,TCL,
  • 如何使用VMware创建虚拟机
  • 解释 React 中的 JSX 语法,如何编译成 React.createElement的过程?
  • Vue.js 测试 Vuex 和 Vue Router
  • 计算机网络模型-TCP/IP协议簇
  • 创建型模式 - 原型模式 (Prototype Pattern)
  • 2025面试Go真题第一场
  • 游戏引擎学习第123天
  • MyBatis简明教程
  • es-head(es库-谷歌浏览器插件)
  • Git系列之Git Reset
  • 量子计算如何改变加密技术:颠覆与变革的前沿
  • MLops:可解释深度神经网络训练平台Neural Designer ®
  • HBase与传统数据库的区别:为什么选择它来处理大数据?
  • MySQL 根据条件多值更新
  • 中兴B863AV3.2-T/B863AV3.1-T2/B863AV3.1-T2K_电信高安_S905L3A-B_安卓9.0_线刷固件包
  • [250224] Yaak 2.0:Git集成、WebSocket支持、OAuth认证等 | Zstandard v1.5.7 发布
  • Redis面试知识点总结
  • 使用open-webui调用大模型
  • Android 常用命令和工具解析之存储相关