我上课-
class Start(object):
def __init__(self):
self.flag = False
self.my_list = []
def set_up(self):
self.flag = True
def end_set_up(self):
self.my_list = [i*2 for i in self.my_list]
以及从该类继承的另一个类-
class Process(Start):
def __init__(self):
super(Process, self).__init__()
def check_flag(self):
if self.flag:
self.my_list = range(1, 10)
在第三堂课中,我想对my_list
class Operation(Start):
def __init__(self):
super(Operation, self).__init__()
def perform_op(self):
self.my_list = [i*2 for i in self.my_list]
现在这些类在代码段中用作-
start_ob = Start()
start_ob.set_up()
process_ob = Process()
process_ob.check_flag()
op_ob = Operation()
op_ob.perform_op()
我对类的理解不强。我想实现的目标是-
Start()
Start()
到第Process()
的{{1}}继承标志,因为我在这里True
调用了set_up()
函数start_ob.set_up()
设置为my_list
[1,2....9]
继承到Start()
中,并修改我在对象Operation()
中创建的列表[1,2....9]
但是根据我的理解,事情并没有动。 Process()
为空,因为类my_list
和set_up
的{{1}}为False
。如何根据我的理解更改代码以使其正常工作?
编辑-在基类中,有两种方法,一种方法是在对象初始化时立即开始运行。它将标志设置为True。之后,同一基类中的另一个方法需要根据该标志运行
答案 0 :(得分:1)
您在这里做什么
start_ob = Start()
start_ob.set_up()
process_ob = Process()
process_ob.check_flag()
op_ob = Operation()
op_ob.perform_op()
…正在创建三个完全独立的对象。每个人都有自己的my_list
。就像您可以拥有三个不同的int
对象并且它们都是单独的值一样,您可以拥有三个不同的Start
对象并且它们都是单独的值。
您可能想要的是:
ob = Operation()
ob.set_up()
ob.check_flag()
ob.perform_op()
现在您有一个对象,它是一个Operation
,因此是一个Process
,因此是一个Start
,因此您可以从这三种类型中的任何一种调用方法,它们会影响物体的价值。现在您正在使用继承。