Python类的继承和多态性

2023-04-02 00:00:00 python 继承 多态性

Python 中的类可以通过继承来扩展。子类可以继承父类的属性和方法,并且还可以添加新的属性和方法,或者重写父类的方法来改变它们的行为。此外,Python 中还支持多态性,这意味着相同的方法可以在不同的对象上执行不同的操作。

下面是一个使用类继承和多态性的示例代码:

class Website:
    def __init__(self, name):
        self.name = name

    def get_name(self):
        return self.name

    def set_name(self, name):
        self.name = name

    def get_description(self):
        return "This website is named " + self.name


class Blog(Website):
    def __init__(self, name, author):
        super().__init__(name)
        self.author = author

    def get_author(self):
        return self.author

    def get_description(self):
        return super().get_description() + " and it is authored by " + self.author


class OnlineStore(Website):
    def __init__(self, name, owner):
        super().__init__(name)
        self.owner = owner

    def get_owner(self):
        return self.owner

    def get_description(self):
        return super().get_description() + " and it is owned by " + self.owner


website = Website("pidancode.com")
print(website.get_description())  # 输出 "This website is named pidancode.com"

blog = Blog("pidancode.com", "John")
print(blog.get_description())  # 输出 "This website is named pidancode.com and it is authored by John"

store = OnlineStore("pidancode.com", "Jane")
print(store.get_description())  # 输出 "This website is named pidancode.com and it is owned by Jane"

在上面的代码中,我们定义了一个基础类 Website,它有一个名称属性 name 和三个方法 get_name、set_name 和 get_description。然后,我们定义了两个子类 Blog 和 OnlineStore,它们继承自 Website 类,并添加了新的属性和方法。

在 Blog 类中,我们定义了一个新的属性 author 和一个新的方法 get_author,它返回博客的作者。我们还重写了父类的方法 get_description,以便返回一个新的描述字符串,其中包括博客的作者。

在 OnlineStore 类中,我们定义了一个新的属性 owner 和一个新的方法 get_owner,它返回在线商店的所有者。我们也重写了父类的方法 get_description,以便返回一个新的描述字符串,其中包括在线商店的所有者。

最后,我们创建了三个不同的对象:website、blog 和 store。虽然它们都是 Website 类的实例,但由于它们的类型是不同的,因此调用它们的 get_description 方法时会返回不同的结果,这就是多态性的体现。

相关文章