簡體   English   中英

使用執行和實例變量的Python命令模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM