在对象中获取命令行字符串

时间:2017-09-21 16:23:40

标签: python proxy

我试图为一个类创建一个代理/管理器对,并完全坚持如何代理该类中存在的对象的内容。

无论如何,代理可以找到调用它的命令的字符串(甚至更好的参数和关键字列表)?

对于那些想要了解更多细节的人来说,以下是一个简单的演示:

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 - 因为内部是代理发送getatribinside的属性,并且经理会尝试在内部腌制&#39;发回 - 无法腌制,因此呼叫失败。

如果代理可以获得完整的命令,例如。 t.inside.call(&#39;你好&#39;)在第一次调用它自己的 getattr 然后它可以发送给管理员,这可能会返回结果没有问题,但到目前为止我无法解决除了&#39;内部以外的任何事情。

1 个答案:

答案 0 :(得分:0)

在python中,您可以使用

获取命令的名称

function.__module__

模块在

SELECT * FROM Phrase WHERE CategoryId NOT IN (SELECT Id FROM Category)