【问题标题】:Python inheritance default values from the parents class来自父类的 Python 继承默认值
【发布时间】:2021-03-02 07:29:02
【问题描述】:

我有两个班级:

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 和 No URL。

非常感谢。

【问题讨论】:

    标签: python-3.x class inheritance


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      不可以,因为您重写了构造函数 (__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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        相关资源
        最近更新 更多