我有两个班级:
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。
非常感谢。
答案 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