首页 > 解决方案 > 来自父类的 Python 继承默认值

问题描述

我有两节课:

class Media:
def __init__(self, title="No Title", author="No Author", release_year="No Release Year", url="No URL"):
    self.title = title
    self.author = author
    self.release_year = release_year
    self.url = url

class Song(Media):
def __init__(self, title, author, release_year, url, album="No Album", genre="No Genre", track_length=0):
    super().__init__(title, author, release_year, url)
    self.album = album
    self.genre = genre
    self.track_length = track_length

然后我尝试创建一个对象

mySong = Song()

我得到一个错误说TypeError: __init__() missing 4 required positional arguments: 'title', 'author', 'release_year', and 'url'

有没有办法从父类继承默认值?就像我们可以将“无标题”从 Media 类传递给 Song 类

如果我只提供部分信息,我们是否可以将它们组合在一起,例如如果我创建一个新对象

newSong = Song(author="justin bieber")

并尝试

print(newSong.author)
print(newSong.url)

我希望它会显示贾斯汀比伯和无 URL。

非常感谢。

标签: python-3.xclassinheritance

解决方案


它不是这样工作的。您可以做什么,您可以让传递一些 kwargs 并从中获取父类的可能参数:

   class Song(Media):
    def __init__(self, album="No Album", genre="No Genre", track_length=0, **kwargs):
        super().__init__(kwargs.get('title', None), kwargs.get('author', None), kwargs.get('release_year', None), kwargs.get('url', None))
        self.album = album
        self.genre = genre
        self.track_length = track_length

推荐阅读