📜  Python中的继承和组合(1)

📅  最后修改于: 2023-12-03 15:34:27.131000             🧑  作者: Mango

Python中的继承和组合

Python中的继承和组合是对象编程中非常重要的两个概念。在这篇文章中,我们将深入研究这两个概念,并学习如何有效地使用它们来编写高质量的代码。

继承

继承是对象编程中的一个重要概念。它允许子类继承父类的属性和方法。这意味着我们可以使用相同的代码来实现不同的类,这使得代码更容易维护和重用。

在Python中,使用class关键字定义一个类,并使用super()函数调用父类的构造函数。

class Animal():
    def __init__(self, age, name):
        self.age = age
        self.name = name
        
class Dog(Animal):
    def __init__(self, age, name, breed):
        super().__init__(age, name)
        self.breed = breed

在上面的代码中,我们定义了一个Animal类,它有一个age属性和一个name属性。我们还定义了一个Dog类,它继承了Animal类,并且有一个额外的breed属性。

注意,在Dog类的构造函数中,我们使用super().__init__()调用了父类的构造函数,并传递了agename参数。这样,Dog类就可以访问Animal类的属性和方法,从而避免了代码的重复。

多重继承

Python支持多重继承,这意味着一个类可以从多个父类继承属性和方法。在下面的代码中,我们定义了一个Rectangle类和一个Square类,它们都继承了ShapeArea两个父类。

class Shape():
    def __init__(self, color):
        self.color = color
        
class Area():
    def get_area(self):
        raise NotImplementedError
        
class Rectangle(Shape, Area):
    def __init__(self, color, width, height):
        super().__init__(color)
        self.width = width
        self.height = height
        
    def get_area(self):
        return self.width * self.height
    
class Square(Rectangle):
    def __init__(self, color, side):
        super().__init__(color, side, side)

在上面的代码中,我们定义了一个Shape类和一个Area类。Shape类有一个color属性,而Area类有一个get_area()方法。然后,我们定义了一个Rectangle类和一个Square类,它们都继承自ShapeArea类。

Rectangle类有一个width属性和一个height属性,它重写了get_area()方法来计算矩形的面积。Square类继承自Rectangle类,并使用super()函数来调用父类的构造函数。

重写方法

在继承中,子类可以重写父类的方法。下面的代码演示了如何重写父类的方法:

class Animal():
    def make_sound(self):
        print("generic animal sound")
        
class Cat(Animal):
    def make_sound(self):
        print("meow")
        
class Dog(Animal):
    def make_sound(self):
        print("bark")

在上面的代码中,我们定义了一个Animal类,它有一个make_sound()方法。然后,我们定义了一个Cat类和一个Dog类,它们都继承了Animal类,并重写了make_sound()方法以实现它们自己的声音。

组合

组合是一种将对象组合在一起以形成更复杂的对象的方法。在Python中,我们可以使用属性来组合对象。下面的代码演示了如何使用组合:

class Address():
    def __init__(self, street, city, state):
        self.street = street
        self.city = city
        self.state = state
        
class Person():
    def __init__(self, name, address):
        self.name = name
        self.address = address

在上面的代码中,我们定义了一个Address类,它有三个属性:streetcitystate。然后,我们定义了一个Person类,它有一个name属性和一个address属性,address属性是一个Address对象。

使用组合的好处是,我们可以将不同的对象组合在一起以创建更复杂的对象。通过使用属性,我们可以避免继承所带来的一些问题,比如多重继承可能会引起命名冲突等问题。

结论

继承和组合是Python中非常重要的概念。它们为我们提供了一种有效地组织和重用代码的方法。在编写代码时,我们应该充分利用这些概念,而不是重复地编写相同的代码。