我试图为一个类创建一个代理/管理器对,并完全坚持如何代理该类中存在的对象的内容。
无论如何,代理可以找到调用它的命令的字符串(甚至更好的参数和关键字列表)?
对于那些想要了解更多细节的人来说,以下是一个简单的演示:
class test(object):
def __init__(self,name):
self.name=name
if name == 'main' : self.inside=test('inside')
def call(self,ans):
return 'Hello to you too'
t=test('main')
现在我的理解python是python命令是两个阶段的进程调用t.call(&#39; hello&#39;)会导致返回一个指向t.call的指针,在这种情况下恰好是:< / p>
print(t.call)
<__main__.test instance at 0x22dd908>
然后使用参数&#39; hello&#39;
调用此实例print(t.call('hello')
'hello to you too'
以类似的方式:
print(t.inside.call('hello'))
'hello to you too'
在这种情况下,t.inside。 getattr 会返回0x208c680&gt;&gt;处的main.test实例。然后用参数&#39; hello&#39;来调用它。 如果您代理t然后键入t.call(&#39; hello&#39;)那么发生的事情是代理使用pickle来传递字符串&#39; call&#39;并且* args到管理员,然后管理员运行远程版本的呼叫,并将字符串&#39; hellow传回给你&#39;通过泡菜。如果您想通过代理(t.name)访问属性,那么代理会发送&#39; getatrib&#39;和&#39; name&#39;通过泡菜并从经理回来&#39;主要&#39; (通过泡菜)
问题是,如果您输入t.inside.name
- 因为内部是代理发送getatrib
和inside
的属性,并且经理会尝试在内部腌制&#39;发回 - 无法腌制,因此呼叫失败。
如果代理可以获得完整的命令,例如。 t.inside.call(&#39;你好&#39;)在第一次调用它自己的 getattr 然后它可以发送给管理员,这可能会返回结果没有问题,但到目前为止我无法解决除了&#39;内部以外的任何事情。
答案 0 :(得分:0)
在python中,您可以使用
获取命令的名称 function.__module__
模块在
SELECT * FROM Phrase WHERE CategoryId NOT IN (SELECT Id FROM Category)