擅长:python、mysql、java
<p>就像你看起来的那样,py.测试有其他方法来运行类作用域方法的安装程序。
您可能会运行这些,因为它们被保证在每次(测试)方法调用之间的正确点上运行—因为您无法控制何时调用
py.测试实例化这样的类。在</p>
<p>{all方法的名称{1)和下面的方法一样,都是</p>
<pre class="lang-py prettyprint-override"><code>class Test1:
def setup(self):
self.a = 1
def test_blah(self):
assert self.a == 1
</code></pre>
<p>然而,正如您所问的关于元类的问题,是的,元类可以创建一个“相当于<code>__init__</code>的自定义方法”。在</p>
<p>当创建一个新对象时,也就是说,当类在Python中实例化时,就好像类本身被调用了一样。内部发生的是调用元类的<code>__call__</code>方法,并传递用于创建实例的参数。在</p>
<p>此方法然后运行传递这些参数的类<code>__new__</code>和<code>__init__</code>方法,并返回<code>__new__</code>返回的值。在</p>
<p>从<code>type</code>继承的元类可以重写<code>__call__</code>来添加额外的<code>__init__</code>类调用,其代码如下:</p>
^{pr2}$
<p>我用pytest运行的一个文件中的一个小类尝试了这个方法,它只起作用:</p>
<pre><code>class Test2(metaclass=Meta):
def __custom_init__(self):
self.a = 1
def test_blah(self):
assert self.a == 1
</code></pre>