Python 从父类继承默认值

时间:2021-03-02 07:29:02

标签: python-3.x class inheritance

我有两个班级:

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)

我希望它会显示 Justin bieber 并且没有 URL。

非常感谢。

2 个答案:

答案 0 :(得分:0)

它不是这样工作的。您可以做什么,您可以让传递一些 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

答案 1 :(得分:0)

不可以,因为您覆盖了构造函数 ( __init__ ) 方法但可以使用 *args 或 **kwd

<块引用>

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

否,信息必须是完整的或有默认值,第二部分是是

class Name(Parent):
      def __init__(self,title="No", url="No"):
                  self.title = title
                  if url.lower() == "no":
                               self.url = url
                  else :
                        self.url = url