在玩具示例中实现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)

以上是在玩具示例中实现python装饰器的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>