【发布时间】:2014-02-09 15:15:57
【问题描述】:
为了理解 *args 和 **kwargs 我做了一些搜索,当我遇到这个问题时*args and **kwargs?
所选答案下方的答案引起了我的注意,是这样的:
class Foo(object):
def __init__(self, value1, value2):
# do something with the values
print value1, value2
class MyFoo(Foo):
def __init__(self, *args, **kwargs):
# do something else, don't care about the args
print 'myfoo'
super(MyFoo, self).__init__(*args, **kwargs)
我在这个例子中尝试了一些东西并以这种方式运行代码:
class Foo(object):
def __init__(self, value1, value2):
# do something with the values
print 'I think something is being called here'
print value1, value2
class MyFoo(Foo):
def __init__(self, *args, **kwargs):
# do something else, don't care about the args
print args, kwargs
super(MyFoo, self).__init__(*args, **kwargs)
foo = MyFoo('Python', 2.7, stack='overflow')
我知道了:
[...]
super(MyFoo, self).__init__(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'stack'
变成super(MyFoo, self).__init__(args, kwargs)
结果是:
('Python', 2.7) {'stack': 'overflow'}
I think something is being called here
('Python', 2.7) {'stack': 'overflow'}
出于一些令人震惊的原因,我质疑这一点:在上面的示例中什么是对和错?在现实生活中什么可以做,什么不能做?
【问题讨论】:
标签: python