在玩具示例中实现python装饰器
我一直在努力寻找一个用例来学习装饰器,我想我已经找到了一个与我相关的用例。
我正在使用以下代码。
在文件中class1.py我有:
import pandas as pd, os
class myClass():
def __init__(self):
fnDone = f'C:user1Desktoploc1fn.csv'
if os.path.exists(fnDone): return
self.Fn1()
pd.DataFrame({'Done': 1}, index=[0]).to_csv(fnDone)
def Fn1(self):
print('something')
if __name__ == '__main__':
myClass()
在文件中class2.py我有:
class myClassInAnotherFile():
def __init__(self):
fnDone = f'C:user1Desktoploc2fn.csv'
if os.path.exists(fnDone): return
self.Fn1()
self.Fn2()
pd.DataFrame({'Done': 1}, index=[0]).to_csv(fnDone)
def Fn1(self):
print('something')
def Fn2(self):
print('something else')
if __name__ == '__main__':
myClassInAnotherFile('DoneFile12)
有没有办法在另一个名为的文件中定义通用装饰器代码,utilities.py以便我可以执行以下操作:
在class1.py我的文件中需要:
import pandas as pd, os
class myClass():
def __init__(self):
fnDone = f'C:user1Desktoploc1fn.csv'
self.Fn1()
pd.DataFrame({'Done': 1}, index=[0]).to_csv(fnDone)
def Fn1(self):
print('something')
if __name__ == '__main__':
@myDecorator
myClass()
在文件中class2.py我有:
class myClassInAnotherFile():
def __init__(self):
fnDone = f'C:user1Desktoploc2fn.csv'
self.Fn1()
self.Fn2()
pd.DataFrame({'Done': 1}, index=[0]).to_csv(fnDone)
def Fn1(self):
print('something')
def Fn2(self):
print('something else')
if __name__ == '__main__':
@myDecorator
myClassInAnotherFile()
本质上是使用装饰器模仿原始行为。
Edit1:我希望扩展我的类定义的功能。在两个原始类定义中,我重复检查fnDone文件的代码,如果存在,则退出该类。目标是有一个装饰器来检查fnDone文件并在它存在时退出类。
Edit2:我也可以将其作为函数来执行,但我正在尝试学习如何使用装饰器扩展类或方法的功能。
Edit3:如果我有以下内容,它会更容易吗class1.py:
def myClass():
fnDone = f'C:user1Desktoploc1fn.csv'
if os.path.exists(fnDone): return
self.Fn1()
pd.DataFrame({'Done': 1}, index=[0]).to_csv(fnDone)
def Fn1(self):
print('something')
if __name__ == '__main__':
myClass()
和class2.py如下:
def myClassInAnotherFile():
fnDone = f'C:user1Desktoploc2fn.csv'
if os.path.exists(fnDone): return
self.Fn1()
self.Fn2()
pd.DataFrame({'Done': 1}, index=[0]).to_csv(fnDone)
def Fn1(self):
print('something')
def Fn2(self):
print('something else')
if __name__ == '__main__':
myClassInAnotherFile('DoneFile12)