在 Python 中扩展一个类

Shikha Chaudhary 2022年5月17日
在 Python 中扩展一个类

在 Python 中,我们可以扩展一个类以从现有类创建一个新类。这成为可能,因为 Python 支持继承特性。

使用继承,我们可以创建一个具有所有父类的特性和方法的子类。除了父类中存在的那些之外,我们还可以向子类添加新功能。

我们甚至可以覆盖父类的那些我们不需要的特性。在阅读本文时,你将学习如何完成所有这些操作。

在 Python 中扩展一个类

简单来说,扩展一个类意味着我们要从现有的或父类中创建一个新的类或子类。扩展一个类与继承一个类是一样的。

让我们看看继承在 Python 中是如何工作的。

在 Python 中使用继承扩展类

为了在 Python 中继承一个类,我们在创建子类时将该类的名称作为参数传递。

语法:

class ChildClass(ParentClass)

让我们通过一个例子来理解这一点。

我们首先创建一个父类 Desserts,它有两个方法 - initintrointro 方法有一个打印语句,用于打印输出中显示的风味和颜色。

class Desserts:
    def __init__(self, flavor, color):
        self.flavor = flavor
        self.color = color

    def intro(self):
        print(self.flavor, self.color)

obj = Desserts("Vanilla", "Pink")
obj.intro()

输出:

Vanilla Pink

我们创建子类 Cake,它将继承类 Desserts。为了让 Cake 类继承 Desserts 类,我们将在创建 Cake 类时将 Desserts 类的名称作为参数传递。

class Cake(Desserts):
    pass

我们在这里使用 pass 关键字,因为我们只继承类 Desserts,而不向子类 Cake 添加任何其他方法或功能。cake 类现在具有与 Desserts 类相同的属性和方法。

我们可以通过创建 Cake 类的对象然后执行 intro 方法来验证这一点,如最后两行代码所示。

class Desserts:
    def __init__(self, flavor, color):
        self.flavor = flavor
        self.color = color

    def intro(self):
        print(self.flavor, self.color)

obj = Desserts("Vanilla", "Pink")
obj.intro()

class Cake(Desserts):
    pass

obj = Cake("Black forest", "Black")
obj.intro()

输出:

Vanilla Pink
Black forest Black

看看 Cake 类如何像 Desserts 类一样执行 intro 方法。

让我们看看如何为这个新创建的子类添加更多方法和属性。

扩展类后将 __init__() 函数添加到子类

即使在继承一个类时,我们也可以向子类添加一个新的 init() 函数。请注意,每当创建类的对象时,都会自动调用 init() 函数。

此外,将 init() 函数添加到子类将不会使用父类的 init() 函数。

class Cake(Desserts):
    def __init__(self, flavor, color):
        self.flavor = flavor
        self.color = color

尽管子类的 init() 方法覆盖了父类 init() 方法的继承,但我们仍然可以使用父类的 init() 方法,如下调用:

class Cake(Desserts):
    def __init__(self, flavor, color):
        Desserts.__init__(self, flavor, color)

在 Python 中扩展类后使用 super() 函数

在 Python 中,super() 函数可用于访问父类的属性和方法。

当子类中有一个新的 init() 使用父类的 init() 方法时,我们可以使用 super() 函数从父类继承所有方法和属性。

class Cake(Desserts):
    def __init__(self, flavor, color):
        super().__init__(flavor, color)

请注意,这里我们没有指定父类的名称; super() 函数会自动识别它。

这都是关于 Python 中继承的基础知识。

但是,如果我们必须向子类添加更多属性或方法怎么办?让我们看看如何做到这一点。

在 Python 中扩展类后向子类添加属性

我们可以向子类添加额外的属性,而不是父类继承的属性,就像我们添加任何其他属性一样。看看如何将名为 quantity 的属性添加到 Cake 类中。

class Cake(Desserts):
    def __init__(self, flavor, color, quantity):
        super().__init__(flavor, color)
        self.quantity = quantity

我们在子类的 init() 函数中又添加了一个参数。另外,不要忘记在创建 Cake 类的对象时为 quantity 再传递一个值,如下所示:

obj = Cake("Black forest", "Black", 5)

在 Python 中扩展类后向子类添加方法

我们在子类中添加了一个方法 price,只需在下面的代码中使用 def 关键字。我们还将 self 关键字作为参数传递。

class Cake(Desserts):
    def __init__(self, flavor, color, quantity):
        super().__init__(flavor, color)
        self.quantity = quantity

    def price(self):
        print("Pay for: ", self.quantity, "items.")

整个代码如下:

class Desserts:
    def __init__(self, flavor, color):
        self.flavor = flavor
        self.color = color

    def intro(self):
        print(self.flavor, self.color)

obj = Desserts("Vanilla", "Pink")
obj.intro()

class Cake(Desserts):
    def __init__(self, flavor, color, quantity):
        super().__init__(flavor, color)
        self.quantity = quantity

    def price(self):
        print("Pay for: ", self.quantity, "items")

obj = Cake("Black forest", "Black", 5)
obj.intro()
obj.price()

输出:

Vanilla Pink
Black forest Black
Pay for:  5 items

请注意,在父类中添加与任何方法同名的方法将覆盖继承的方法。

这就是我们如何在 Python 中扩展一个类。请参阅官方文档以了解更多信息。

相关文章 - Python Class