擅长:python、mysql、java
<p>不确定这是否是您想要的,但是一些内省/varname规则可以让您有所收获:</p>
<pre><code>import functools
class X(object):
@property
def Y(self):
return YProxy(self)
class Y(object):
@classmethod
def method(cls, x_inst, *a):
print x_inst, a
instancemethod = type(Y.method)
class YProxy(object):
def __init__(self, x_inst):
self.x_inst = x_inst
def __getattr__(self, k):
obj = getattr(Y, k)
if isinstance(obj, instancemethod) and obj.func_code.co_varnames[0] == 'cls':
return functools.partial(obj, self.x_inst)
return obj
</code></pre>
<p>我认为,使用<code>cls</code>作为类方法的第一个参数的名称是公认的风格。<code>self</code>不太合适。在</p>
<p>ETA:如果还有其他类方法,也可以检查名为“x\u inst”的变量名或类似名称,或者在相关类中使用修饰符来设置方法的属性&;c、 关键是,如果您有某种编程方法来区分哪些方法需要与实例一起提供,那么您可以在<code>__getattr__</code>中执行所需的操作</p>