2017-09-21 26 views
0

我正在嘗試爲類創建代理/管理器對,並且完全停留在如何代理該類中存在的對象的實例上。在對象中獲取命令行字符串

是否有代理可以找到調用它的命令字符串(或者甚至更好的參數和關鍵字列表)?

對於那些誰想要更多的細節下面是一個簡單的例子:

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') 

現在我的理解蟒是蟒蛇命令是兩個階段處理呼叫到t.call在(「你好」)結果指針t.call返回在這種情況下發生的是:

print(t.call) 
<__main__.test instance at 0x22dd908> 

此實例然後用參數「你好」

print(t.call('hello') 
'hello to you too' 

以類似的方式:

print(t.inside.call('hello')) 
'hello to you too' 

在這種情況下t.inside。 getattr返回0x208c680處的main.test實例>>然後使用參數'hello'調用 如果代理t然後鍵入t.call('hello'),那麼發生的事情是代理正在使用pickle來傳遞字符串'call'和* args給管理器,然後管理器運行遠程版本的調用,並通過pickle將字符串'hellow也傳遞給你'。如果你想通過代理(t.name)訪問一個屬性,那麼代理通過pickle發送'getatrib'和'name'並從管理器'main'返回(通過pickle)

問題是如果你鍵入t.inside.name - 由於代理髮送getatribinside的內部屬性,並且管理器嘗試醃製「內部」以發回 - 不能醃製,因此調用失敗。

如果代理可以得到完整的命令,例如。 t.inside.call('hello')在第一次打電話給它自己的getattr然後它可以發送給經理,可以返回結果沒有問題,但到目前爲止我不能解決如何獲得除'內'。

回答

0
在Python

,你可以用

function.__name__

模塊處於

function.__module__

得到命令的名稱