python-3.x - 来自父类的 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。
非常感谢。
解决方案
它不是这样工作的。您可以做什么,您可以让传递一些 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
推荐阅读
- react-native - Vimeo API 在一个 GET 请求中获取多个视频
- ms-access - 如何在 Jackcess 中从 long 转换为 Access Date/Time 值?
- javascript - 将 js 函数中的变量值作为数据传递到 ajax
- python - Python 日志记录自动捕获所有异常
- ruby-on-rails - 如何将 React Native 应用程序上的本地图像文件上传到 Rails api?
- ms-access - 让我的用户选择他想要保存文件访问的位置
- macos - 将 BezierPath 转换为 SVG 文件
- bootstrap-4 - 使用 Angular 材质后,CSS 样式在 Angular 6 中不起作用
- shopify - Shopify Liquid 如果要显示的语句
- spring-boot - 如何让 Teamcity Artifactory 插件在 Gradle 中调用 bootJar 而不是 Jar?