可能的实现之一
依赖注入
构思:
import pandas as pd
class Foo:
def __init__(self, df):
self.df = df
self.keys = []
self.runner = FooJobRunner(self) # initiate specialized job processor
def startJob(self):
self.runner.first_job()
self.runner.second_job()
self.runner.third_job()
class FooJobRunner:
''' Class which serves as a job processor specifically for Foo instances '''
def __init__(self, foo):
if not isinstance(foo, Foo):
raise TypeError('Foo instance required!')
self.foo = foo
def first_job(self):
print(self.foo.df['a'])
print('1st job ended\n')
def second_job(self):
print(self.foo.df['b'])
print('2nd job ended\n')
def third_job(self):
print(self.foo.df['c'])
print('3rd job ended\n')
# sample dataframe
df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6], 'c': [7,8,9]})
foo = Foo(df)
foo.startJob()
输出:
0 1
1 2
2 3
Name: a, dtype: int64
1st job ended
0 4
1 5
2 6
Name: b, dtype: int64
2nd job ended
0 7
1 8
2 9
Name: c, dtype: int64
3rd job ended