<p>将此作为继承的模板,重点介绍<a href="https://docs.python.org/3/library/functions.html#super" rel="nofollow noreferrer">super()</a>方法:</p>
<pre><code>class Foo:
def __init__(self):
self.name = 'Foo'
class Bar(Foo):
def __init__(self):
super().__init__()
b = Bar()
b.name
# outputs 'Foo'
</code></pre>
<p>对于特定类型的类(接受未知数量的初始化参数,即<a href="https://docs.python.org/3.6/faq/programming.html#how-can-i-pass-optional-or-keyword-parameters-from-one-function-to-another" rel="nofollow noreferrer">*args</a>):</p>
<pre><code>class Foo:
def __init__(self, *args):
self.name = 'Foo'
for i, arg in enumerate(args):
setattr(self, 'thing_' + str(i), arg)
class Bar(Foo):
def __init__(self, *args):
super().__init__(*args)
b = Bar('hello', 'world')
b.name
# outputs 'Foo'
b.thing_0
# outputs 'hello'
b.thing_1
# outputs 'world'
</code></pre>
<p>现在我将亲自使用<code>**kwargs</code>over <code>*args</code>来指定唯一的实例属性:</p>
<pre><code>class Foo:
def __init__(self, **kwargs):
self.name = 'Foo'
for att in kwargs:
setattr(self, att, kwargs[att])
class Bar(Foo):
def __init__(self, **kwargs):
super().__init__(**kwargs)
b = Bar(value = 4, area = 3.14)
b.name
# outputs 'Foo'
b.value
# outputs 4
b.area
# outputs 3.14
</code></pre>