笔记 · 2025-02-05

笔记:理解python对象

python对象的基本概念

对象是python程序的基本单元,包含数据(属性)和行为(方法)。事实上,在python中,一切都是对象,如数字、字符串、列表、函数、模块,本质上都是对象。

对象有自身的特性,一是身份,可以通过函数id()获取,二是类型,可以通过函数tpye()获取,三是值,即对象存储的具体数据。

对象的创建和使用

我们通过类来创建对象。以下创建了一个狗(Dog)类,声明了狗的属性,即名字和年龄,然后使用一个方法bark定义了狗类的特定行为:吠。

class Dog:
    def __init__(self, name, age):
        self.name = name  # 属性
        self.age = age

    def bark(self):  # 方法
        print(f"{self.name} is barking!")

实例化对象,也就是根据狗类创建某条具体的狗,而不再是概念化的狗这一类:

my_dog = Dog("大黄", 3)

这样一条3岁的名叫大黄的狗就出现了。

当我们需要知道大黄的名字的时候,就用这条具体的狗来询问它的名字,这就是属性的访问:

my_dog.name

当我们需要这条具体的狗做出行为“犬吠”的时候,就调用相应的方法:

my_dog.bark()

当我们不要这条狗了,也可以进行删除,python通过垃圾回收机制自动销毁不再使用的对象:

del my_dog

对象的特殊方法

构造函数,初始化对象属性,可以理解为对象的先天属性:

__init__

对象的字符串表示形式,可以使用print输出。

class Dog:
    def __str__(self):
        return f"Dog(name={self.name}, age={self.age})"

定义对象的相等性比较:

class Dog:
    def __eq__(self, other):
        return self.name == other.name and self.age == other.age

对象的继承和多态

子类继承父类的属性和方法

class Animal:
    def speak(self):
        print("Animal speaks")

class Dog(Animal):
    def bark(self):
        print("Dog barks")

在这里,父类是动物,子类是狗,class Dog(Animal)表示狗类继承了动物类,即它可以使用动物类下所有的方法和属性,这里即speak方法。

多态,即不同的子类对同一方法有不同的实现。

class Animal:
    def speak(self):
        print("Animal speaks")

class Cat(Animal):
    def speak(self):
        print("Cat meows")

class Dog(Animal):
    def bark(self):
        print("Dog barks")

animals = [Dog(), Cat()]
for animal in animals:
    animal.speak()  

以上代码,运行结果为:

Animal speaks
Cat meows

狗类继承了动物类,所以在调用animal.speak()方法时,自然调用到了动物类的speak方法。而虽然猫类继承自动物类,但它重写了动物类的speak方法,所以结果为:猫喵。

这就是不同的子类(狗类,猫类)对同一方法(speak)的不同实现,一个是重写,一个是继承。

对象的应用

一般应用于数据封装,提高代码的可维护性;用于模块化编程,便于扩展和复用;用于面向对象的编程,oop,利用继承和多态的特性构建复杂系统。

目录