Python继承无法正常工作

时间:2018-08-06 16:37:37

标签: python oop python-3.5

我上课-

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_listset_up的{​​{1}}为False。如何根据我的理解更改代码以使其正常工作?

编辑-在基类中,有两种方法,一种方法是在对象初始化时立即开始运行。它将标志设置为True。之后,同一基类中的另一个方法需要根据该标志运行

1 个答案:

答案 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,因此您可以从这三种类型中的任何一种调用方法,它们会影响物体的价值。现在您正在使用继承。