在 Python 中扩展一个类
在 Python 中,我们可以扩展一个类以从现有类创建一个新类。这成为可能,因为 Python 支持继承特性。
使用继承,我们可以创建一个具有所有父类的特性和方法的子类。除了父类中存在的那些之外,我们还可以向子类添加新功能。
我们甚至可以覆盖父类的那些我们不需要的特性。在阅读本文时,你将学习如何完成所有这些操作。
在 Python 中扩展一个类
简单来说,扩展一个类意味着我们要从现有的或父类中创建一个新的类或子类。扩展一个类与继承一个类是一样的。
让我们看看继承在 Python 中是如何工作的。
在 Python 中使用继承扩展类
为了在 Python 中继承一个类,我们在创建子类时将该类的名称作为参数传递。
语法:
class ChildClass(ParentClass)
让我们通过一个例子来理解这一点。
我们首先创建一个父类 Desserts
,它有两个方法 - init
和 intro
。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()
输出:
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 中扩展一个类。请参阅此官方文档以了解更多信息。