首页 > 解决方案 > Python:在另一个文件/类中分离一些实例方法的定义

问题描述

我有一堂课:

class Foo:
    def __init__(self, df):
        self.df = df
        self.keys = []

    def startJob(self):
        self.first_job()
        self.second_job()
        self.third_job()

    def first_job(self):
        #do soemthing with df

    def second_job(self):
        #do soemthing with df

    def third_job(self):
        #do soemthing with df

作业列表可能会变得很小,因此我想将作业分离到第二个文件中,并且只__init__包含startJob在第一个文件中。我该怎么做?有没有更好的方法来实现这种分离以提高可读性?

标签: python

解决方案


你可以这样做:

# jobs.py

__all__ = ["jobs"]

jobs = []

def register(job):
    jobs.append(job)
    return job

## WARNING: the definition order is important

@register
def first_job(self):
    # ...

@register
def second_job(self): 
   # ...

接着:

# foo.py

from jobs import jobs

class Foo:
    def __init__(self, df, jobs=jobs):
        self.jobs = jobs
        self.df = df
        self.keys = []

    def start_job(self):
        for job in self.jobs:
            job(self)

推荐阅读