作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基本的 Python 脚本,需要将其转换为类并创建该类的多个实例。
该脚本有一些函数修改的全局数据持有者。全局变量是这样的:
# a global list
list_1 = [...]
# a global dictionary
dict_1 = {...}
# a global pandas dataframe
df_1 = pd.DataFrame(...)
我有一个主函数(执行最基本的任务)和许多用于主函数在需要时调用的特定任务的辅助函数。像这样的事情:
# main function
def main_def():
global list_1, dict_1, df_1
aux_def_1 (list_1, df_1)
aux_def_2 (dict_1, df_1)
# auxiliary function 1
def aux_def_1 ()
global list_1, dict_1, df_1
...
# auxiliary function 2
def aux_def_2 ()
global list_1, dict_1, df_1
...
我在 jupyter 笔记本中使用上述脚本,如下所示:
import script as scr
scr.main_def()
scr.aux_def_1()
scr.aux_def_2()
scr.list_1
scr.dict_1
scr.df_1
现在我需要创建多个像上面这样的主要函数,并且大多数全局变量和辅助函数将保持不变。
实现此目的的一种方法是创建一个定义全局变量和辅助函数的基类,然后创建该类的实例。每个实例都有不同的主要功能。
对现有代码进行最少更改的最佳方法是什么?
编辑:是否可以按如下方式安排此事:
class BaseClass:
# BaseClass list
list_1 = [...]
# BaseClass dictionary
dict_1 = {...}
# BaseClass pandas dataframe
df_1 = pd.DataFrame(...)
# BaseClass auxiliary function 1
def aux_def_1 ()
# BaseClass auxiliary function 2
def aux_def_2 ()
class MainDef_1(BaseClass)
def __init__(self, parameter1, parameter2, parameter3):
self.parameter1 = parameter1
self.parameter2 = parameter2
self.parameter3 = parameter3
class MainDef_2(BaseClass)
def __init__(self, parameter1, parameter3, parameter4):
self.parameter1 = parameter1
self.parameter3 = parameter3
self.parameter4 = parameter4
最佳答案
这可能太简单了(或者我仍然不明白你想要做什么的细节,但似乎这种方法可行)。
class BaseClass:
list_1 = [...]
dict_1 = {...}
df_1 = pd.DataFrame(...)
def aux_def_1(self):
pass
def aux_def_2(self):
pass
class MainDef_1(BaseClass)
def __init__(self, parameter1, parameter2, parameter3):
self.parameter1 = parameter1
self.parameter2 = parameter2
self.parameter3 = parameter3
def main(self):
# whatever this version does...for example.
self.list_1 # Accesses attribute of base class.
x = self.parameter1 + 42 # Accesses attribute of this class.
class MainDef_2(BaseClass)
def __init__(self, parameter1, parameter3, parameter4):
self.parameter1 = parameter1
self.parameter3 = parameter3
self.parameter4 = parameter4
def main(self):
# whatever this version does...for example.
result = self.aux_def_2() # Use method defined in base class.
y = self.parameter4 + 13 # Accesses attribute of this class.
每个子类都定义自己的main()
方法。其中所需参数可以通过 parameterN
引用以及基类的数据和方法(同样,只需在它们的名称前加上“self.
”前缀即可。
关于python - 如何将基本脚本中的代码转换为带有实例的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52671392/
我是一名优秀的程序员,十分优秀!