[英]Python Command Pattern using execute and instance variables
我正在嘗試編寫一個Commander類,但無法使其正常工作:
#torbotCommander.py
from mongoconn import MongoConnection
class TorbotCommander(object):
excecute = {
'request': TorrentRequest,
'list': ListTorrents,
'fulfill': FulfillRequest
}
def __init__(self, TorbotCommandObj):
send(TorbotCommander.execute[TorbotCommandObj.__command](TorbotCommandObj))
def TorrentRequest(self, TorbotCommandObj):
print "request"
def ListTorrents(self, TorbotCommandObj):
print "list"
def FulfillRequest(self, TorbotCommandObj):
print "fulfill"
當我運行該文件時,雖然name 'TorrentRequest' is not defined
。 我不明白什么
這很可能是因為您在此處調用TorrentRequest函數:
execute = {
'request': TorrentRequest,
}
它位於您在類中實際定義TorrentRequest函數之前。
您的問題是在創建名稱之前先引用名稱TorrentRequest
。 Python允許在定義方法之前先對其進行引用,但該引用必須在類__init__
方法內部。 可以通過一個簡單的示例看到此行為:
# Python 2
>>> class foo(object):
... baz = bar
... def __init__(self):
... pass
... def bar(self):
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo
NameError: name 'bar' is not defined
>>>
可能還會有人認為使用self
會起作用。 它不會:
>>> class foo(object):
... baz = self.bar()
... def __init__(self):
... pass
... def bar(self):
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo
NameError: name 'self' is not defined
>>>
最簡單的解決方案是簡單地execute
類的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.