我试图检查一个类是否能够通过装饰器拥有一个文件,使用下面的代码我发现即使子类CSVStorageHandler
调用其父类checkIfNoStorageHandler
变量{{ 1}}超出范围。
这是相当令人困惑的,任何人都可以帮忙吗?
func
错误消息
class StorageHandler(object):
def __init__(self):
self.output_file = self.openFile()
def checkIfNoStorageHandler(func):
def createFileByStorageHandler(self, *args, **kwargs):
print func
if self.__class__.__name__ == "CSVStorageHandler":
return self.func()
else:
print ("class " + self.__class__.__name__ + " don't store file by default")
return None
return createFileByStorageHandler
@checkIfNoStorageHandler
def openFile(self):
return open('./log.txt', 'w')
class CSVStorageHandler(StorageHandler):
def doNothing(self):
pass
class NoStorageHandler(StorageHandler):
def doNothing(self):
pass
test = CSVStorageHandler()
答案 0 :(得分:1)
self.func()
是一种勇敢的尝试,但不起作用,因为点语法永远不会关心名为func
的本地。
您希望确保该功能收到self
,因此请将其传入。
return func(self, *args, **kwargs)
答案 1 :(得分:0)
func
在范围内,但您的代码正在尝试访问self.func
。也许你的意思是在第9行使用func()
而不是self.func()
?