我正在嘗試爲類創建代理/管理器對,並且完全停留在如何代理該類中存在的對象的實例上。在對象中獲取命令行字符串
是否有代理可以找到調用它的命令字符串(或者甚至更好的參數和關鍵字列表)?
對於那些誰想要更多的細節下面是一個簡單的例子:
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
- 由於代理髮送getatrib
和inside
的內部屬性,並且管理器嘗試醃製「內部」以發回 - 不能醃製,因此調用失敗。
如果代理可以得到完整的命令,例如。 t.inside.call('hello')在第一次打電話給它自己的getattr然後它可以發送給經理,可以返回結果沒有問題,但到目前爲止我不能解決如何獲得除'內'。