gpt4 book ai didi

python - 为什么 `object.__init__` 不带参数

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:26 24 4
gpt4 key购买 nike

为什么 object.__init__ 不将 *args, **kwargs 作为参数?据我所知,这以非常烦人的方式破坏了一些简单的代码,没有任何好处:

假设我们要确保调用所有父类的所有 __init__。只要每个 init 都遵循调用 super().__init__ 的简单约定,这将保证整个层次结构被运行并且恰好一次(也不必专门指定父级)。当我们传递参数时出现问题:

class Foo:
def __init__(self, *args, **kwargs):
print("foo-init")
super().__init__(*args, **kwargs) # error if there are arguments!

class Bar:
def __init__(self, *args, **kwargs):
print("bar-init")
super().__init__(*args, **kwargs)

class Baz(Bar, Foo):
def __init__(self, *args, **kwargs):
print("baz-init")
super().__init__(*args, **kwargs)

b1 = Baz() # works
b2 = Baz("error")

这样做的原因是什么?最好的一般解决方法是什么(!在我的特定情况下很容易解决,但这依赖于对层次结构的额外了解)解决方法?我能看到的最好的是检查父对象是否是对象,在那种情况下不给它任何参数..非常丑陋。

最佳答案

可以看到http://bugs.python.org/issue1683368进行讨论。请注意,那里确实有人要求它导致错误。另见 the discussion on python-dev .

无论如何,你的设计很奇怪。为什么要编写每个类来采用未指定的 *args**kwargs?一般来说,最好让方法接受它们需要的参数。例如,如果有人输入错误的关键字名称,则对所有内容都接受开放式参数可能会导致各种错误。有时这是必要的,但它不应该是默认的做事方式。

关于python - 为什么 `object.__init__` 不带参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11234519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com