Python 面向对象——1.基本概念

本章学习链接如下:

基本概念与语法

类(Class):定义了一组对象共有的属性和方法的蓝图。类是创建对象的模板。

对象(Object):类的实例。对象包含实际的数据和操作数据的方法。

属性(Attribute):对象的变量,用于存储数据。

方法(Method):属于对象的函数,用于定义对象的行为。

继承(Inheritance):允许一个类继承另一个类的属性和方法,从而促进代码的重用。

封装(Encapsulation):隐藏对象的内部细节,只通过定义好的接口与外界交互,这有助于降低系统的复杂性和增强安全性。

多态(Polymorphism):指允许使用对象的共同接口来访问不同的底层形式(数据类型)

 1.类和对象

这样干巴巴的解释非常的难以理解,我们可以把类想象成一个制造蛋糕的食谱。食谱上有制作蛋糕所需的原材料(属性)和制作步骤(方法)。这个食谱就是一个模板,告诉你如果按照特定的步骤操作,将得到什么样的蛋糕。运用不同的方法我们可以得到不同口味的蛋糕。

对象则是根据这个食谱实际制作出来的蛋糕。每次你使用这个食谱制作蛋糕,都会得到一个新的蛋糕实体,这就是一个对象。虽然每个蛋糕的基本结构相同(因为都是按照同一食谱来的),但你可以根据口味调整原料,比如加更多的糖或者少放点盐,这样每个蛋糕都有自己独特的风味,这些特定的风味和特征就是对象的属性。

比如现在我们需要写一个代码题目,有一个类叫做 Car,它定义了车辆的基本属性如品牌、颜色、速度,以及可以进行的操作如启动、停止等。当你创建一个具体的 Car 对象时,比如一个红色的丰田汽车,你就是根据 Car 类的食谱制作了一个蛋糕,这个蛋糕具体的是红色的,品牌是丰田。

我们一步步来做这个题目:


在指明类的属性中,我们用到的是类的构造函数,类的构造函数是一个非常重要的组件,它的主要作用是初始化新创建的对象的状态,构造函数被称为__init__方法。

(1)基本语法

构造函数

构造函数是通过定义一个名为 __init__ 的特殊方法实现的。这个方法会在类的对象被创建时自动调用。

  • class ClassName::定义了一个名为 ClassName 的类。
  • def __init__(self, param1, param2):是类的构造函数。__init__ 是一个由Python预定义的特殊方法(也称为魔术方法),用于初始化新创建的对象。
  • self:是一个指向实例本身的引用,用于访问类的属性和方法。
  • param1, param2:构造函数可以接受参数,这些参数在创建类的实例时提供,用于设置对象的初始状态或执行其他操作。
  • self.param1 = param1:这句话代码的作用是:将传入的参数赋值给实例的属性,这句话可能有些拗口,这是什么意思呢?
  • self.param1和param1的区别:我们可以看到这两个变量的位置,param1是构造函数__init__的变量,而self.param1是类中的变量,所以如果我们想要访问基于类所创建的对象的属性和方法时,必须经过变量self.×××。
class ClassName:
    def __init__(self, param1, param2):
        self.param1 = param1
        self.param2 = param2

如下代码所示:

  • 当创建一个 Person 类的实例时,如 person1 = Person('Alice', 30),构造函数 __init__ 被调用,其中的 nameage 参数分别被设置为 'Alice'30
  • self.name = nameself.age = age 这两句代码将这些参数值赋给实例的 nameage 属性。即作用为当我们创建类中不同的实例时,这些实例就已经拥有了类中的属性,不同的实例对于这些属性有不同的赋值,这意味着 在这个例子中,person1.name 将被设置为 'Alice'person1.age 被设置为 30
  • 这样设置后,这些属性可以在类的其他方法中被访问和使用,比如 display 方法可以打印出这些属性的值。
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def display(self):
        print(f"Name: {self.name}, Age: {self.age}")

2.属性和方法

关于属性之前我们介绍过了 。

类的属性

属性是类中定义的变量,用于存储对象的状态或数据。在类的实例中,每个属性可以有不同的值,即每个对象可以有自己的属性值。

类的方法

方法是定义在类中的函数,用于执行操作,可以访问和修改类的属性,或执行与类功能相关的任务。

基本语法
class ClassName:
    def method_name(self, parameter1, parameter2):
        # 方法体
        return some_value
具体实例

在这个示例中,Car 类有一个方法 describe,它返回一条描述该汽车的信息。这个方法使用了 self 关键字来访问实例的属性。 

class Car:
    def __init__(self, brand, color):
        self.brand = brand
        self.color = color

    def describe(self):
        return f"This is a {self.color} {self.brand}."

实例,属性,方法的具体使用

这个代码示例展示了如何创建一个具有属性和方法的 Car 类。accelerate 方法用于增加汽车的速度,而 brake 方法用于停车。每个方法都通过 self 访问和修改了汽车的状态,展示了面向对象编程的封装特性 

class Car:
    def __init__(self, brand, color, speed=0):
        self.brand = brand
        self.color = color
        self.speed = speed
    
    def describe(self):
        return f"This is a {self.color} {self.brand}."


    def accelerate(self, amount):
        self.speed += amount
        return f"{self.brand} is now going {self.speed} km/h."

    def brake(self):
        self.speed = 0
        return f"{self.brand} has stopped."

# 创建Car类的实例
my_car = Car("Toyota", "red")
print(my_car.describe())  # 调用方法
print(my_car.accelerate(50))  # 加速车辆
print(my_car.brake())  # 刹车停车

 


练习题

创建一个 Car 类的实例,名为 my_car,它是一个红色的丰田汽车。随后调用这个实例的启动、加速、减速和停止方法,以展示类的功能。通过这些操作,可以看到汽车状态的变化和如何通过类的方法控制这些状态。这是一个很好的面向对象编程(OOP)示例,展示了如何用Python来封装数据和功能。

1.指明类属性,指明car这个类的属性是品牌,颜色,初始速度为0.

class Car:
    def __init__(self, brand, color, speed=0):
        self.brand = brand
        self.color = color
        self.speed = speed
  1. 构造函数:接受品牌、颜色和可选的初始速度参数,初始化汽车的基本属性。
  2. 启动方法 (start):将汽车的速度从0增加到10,并打印当前状态。
  3. 停止方法 (stop):将汽车的速度设置为0,并打印停车状态。
  4. 加速方法 (accelerate):接受一个增量参数,将此数值加到当前速度上,并打印新的速度。
  5. 减速方法 (decelerate):接受一个减速值,如果减速值大于当前速度,则调用停止方法;否则从当前速度中减去该值,并打印新的速度。

代码如下所示,并带有对应的注释。

class Car:
    def __init__(self, brand, color, speed=0):
        """
        初始化一个新汽车,指定品牌、颜色和可选的初始速度。
        :param brand: String, 汽车的品牌。
        :param color: String, 汽车的颜色。
        :param speed: Integer, 汽车当前的速度,默认为0。
        """
        self.brand = brand
        self.color = color
        self.speed = speed

    def start(self):
        """
        启动汽车,将速度从0设置为默认的起始速度10。
        """
        self.speed = 10
        print(f"已启动{self.color}色的{self.brand}汽车,当前速度为{self.speed}。")

    def stop(self):
        """
        停止汽车,将速度设置为0。
        """
        self.speed = 0
        print(f"{self.color}色的{self.brand}汽车已停止。")

    def accelerate(self, increase):
        """
        增加汽车的速度。
        :param increase: Integer, 增加的速度量。
        """
        self.speed += increase
        print(f"{self.color}色的{self.brand}汽车正在加速,当前速度为{self.speed}。")

    def decelerate(self, decrease):
        """
        减少汽车的速度。
        :param decrease: Integer, 减少的速度量。
        """
        if decrease > self.speed:
            print("减速量超过当前速度,汽车将停止。")
            self.stop()
        else:
            self.speed -= decrease
            print(f"{self.color}色的{self.brand}汽车正在减速,当前速度为{self.speed}。")

# 创建一个具体的 Car 对象
my_car = Car('Toyota', 'red')

# 使用 Car 对象的方法
my_car.start()
my_car.accelerate(20)
my_car.decelerate(10)
my_car.stop()

相关推荐

  1. 面向对象基础概念

    2024-04-20 23:36:03       11 阅读
  2. C#-面向对象基本概念

    2024-04-20 23:36:03       23 阅读
  3. 面向对象编程基本概念

    2024-04-20 23:36:03       9 阅读
  4. 关于面向对象面向过程的基本概念

    2024-04-20 23:36:03       13 阅读
  5. Python 基础教程:面向对象

    2024-04-20 23:36:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 23:36:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 23:36:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 23:36:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 23:36:03       20 阅读

热门阅读

  1. 使用JWT、Redis + token实现用户登录的两种方式。

    2024-04-20 23:36:03       14 阅读
  2. Android 13 有线以太网静态ip保存逻辑梳理分析

    2024-04-20 23:36:03       14 阅读
  3. 使用Python实现超参数调优

    2024-04-20 23:36:03       14 阅读
  4. Swift知识点 --- AnyView

    2024-04-20 23:36:03       12 阅读
  5. hyref 开发者推荐项目

    2024-04-20 23:36:03       14 阅读
  6. React Flow浏览器默认事件失效问题解决

    2024-04-20 23:36:03       15 阅读
  7. npm 更改国内镜像的方法

    2024-04-20 23:36:03       14 阅读
  8. 等保测评:网络安全法规框架下的关键合规实践

    2024-04-20 23:36:03       14 阅读
  9. vue--样式绑定--样式切换方法

    2024-04-20 23:36:03       11 阅读
  10. Rust 构建跨平台 GUI 的新选择

    2024-04-20 23:36:03       12 阅读