首页 > 解决方案 > 如何在python中修改/覆盖继承的类函数?

问题描述

say_hello在父类和继承类中都有确切的函数名称。我想name在 Kitten 类中指定参数,但允许用户在 Cat 类中指定参数。

有没有办法避免需要在 Kitten 类return ('Hello '+name)的函数中重复该行?say_hello

目前:

class Cat:
    def __init__(self):
        pass

    def say_hello(name):
        return ('Hello '+name)

class Kitten(Cat):
    def __init__(self):
        super().__init__()

    def say_hello(name='Thomas'):
        return ('Hello '+name)

x = Cat
print (x.say_hello("Sally"))
y = Kitten
print (y.say_hello())

理想情况下:

class Cat:
    def __init__(self):
        pass

    def say_hello(name):
        return ('Hello '+name)

class Kitten(Cat):
    def __init__(self):
        super().__init__()

    def say_hello():
        return super().say_hello(name='Thomas') # Something like this, so this portion of the code doesn't need to repeat completely

标签: python-3.xclassinheritanceoverriding

解决方案


say_hello方法应包含self作为第一个参数,以便它可以使用该super()函数访问父say_hello方法。您还应该通过用括号调用它来实例化一个类:

class Cat:
    def say_hello(self, name):
        return 'Hello ' + name

class Kitten(Cat):
    def say_hello(self, name='Thomas'):
        return super().say_hello(name)

x = Cat()
print(x.say_hello("Sally"))
y = Kitten()
print(y.say_hello())

这输出:

Hello Sally
Hello Thomas

推荐阅读