擅长:python、mysql、java
<p>好吧,我可能会为此付出代价,但我想出了一个解决方案:</p>
<pre><code>>>> class trythis:
... def __init__(self):
... self.firstvar=1
... self.secondvar=2
... self.thirdvar=3
... self.fourthvar=4
... def method1(self,firstvar=None,secondvar=None,thirdvar=None):
... kwargs=vars()
... for k, v in kwargs.iteritems():
... if k != 'self':
... if v:
... setattr(self, k, v)
... print("firstvar {}".format(self.firstvar))
... print("secondvar {}".format(self.secondvar))
... print("thirdvar {}".format(self.thirdvar))
... print("fourthvar {}".format(self.fourthvar))
...
>>> a=trythis()
>>> a.method1()
firstvar 1
secondvar 2
thirdvar 3
fourthvar 4
>>> a.method1(firstvar=9)
firstvar 9
secondvar 2
thirdvar 3
fourthvar 4
>>>
</code></pre>
<p>因此,当不带参数调用方法时,将使用实例属性,但如果在方法调用上设置了参数,则实例变量将被覆盖</p>
<p>在上面展开的是一个实现这一点的元类:</p>
^{pr2}$
<p>因此,无论在trythis类上定义了什么方法,当调用方法时,它们的参数都会自动设置在trythis对象上,并且执行此操作的代码被提取到一个元类中</p>