【问题标题】:Loading different classes dependant on list contents根据列表内容加载不同的类
【发布时间】:2019-09-02 20:59:06
【问题描述】:

我要调用三个类并根据列表内容保存它们。我想弄清楚如何调用两个类并在两个类中调用值并保存它们,当我以后想调用它们时,这些类会记住并显示用户已选择的内容。

代码:

_list = [0, 1, 2, 3, 4]

class Data(object):
    def __init__(self):
        self.ID = 'Data_id'
        self.first = 'Data_1'
        self.second = 'Data_2'
        self.third = 'Data_3'

class Value(object):
    def __init__(self):
        self.ID = 'Value_id'
        self.first = 'Value_1'
        self.second = 'Value_2'
        self.third = 'Value_3'


class Base(object):
    def __init__(self):
        self.item = -1
        if self.item == 1 or self.item == 2:
            self.first_class = Data()
            self.second_class = Value()
            print('Item:', self.item, 'Class_ID: {}'.format( self.first_class.second))
            print('Item:', self.item, 'Class_ID: {}'.format( self.second_class.first))
        elif self.item == 2 or self.item == 4:
            self.first_class = Data()
            self.second_class = Value()
            print('Item:', self.item, 'Class_ID: {}'.format( self.first_class.first))
            print('Item:', self.item, 'Class_ID: {}'.format( self.second_class.third))
        else:
            self.first_class = Data()
            self.second_class = Value()
            print('Item:', self.item, 'Class_ID: {}'.format( self.first_class.ID))
            print('Item:', self.item, 'Class_ID: {}'.format( self.second_class.ID))

run = Base()
for i in _list:
    run.item = _list[i]

_list 值每次都会更改,例如,它可以是 None 或从 0 到 9 的任何 int 数。这个想法是每次初始化列表中的项目时调用两个类Data and Value。然后调用类中的值,例如调用第 1 项,然后运行两个类并调用值。

        print('Item:', self.item, 'Class_ID: {}'.format( self.first_class.first))
        print('Item:', self.item, 'Class_ID: {}'.format( self.second_class.third))

执行for循环后,用户想运行以下代码或知道在item = 3处调用了哪个类的哪些值

run.item = _list[3]

我怎样才能实现这种行为? 我很感激任何帮助。提前谢谢。

【问题讨论】:

    标签: python python-3.x list class


    【解决方案1】:

    ___init___ 是一个特殊的方法,它应该在类初始化时只运行一次。当您调用 run = Base() 逻辑运行时,self.item 将被评估为 -1

    你的班级基本上是这样的:

    controls = [0,1]
    
    class Controlled:
         def __init__(self):
            self.param = -1
            if self.param == 0:
                print(0)
            elif self.param == 1:
                print(1)
            else:
                print('This is not unexpected')
    
    c = Controlled()
    for p in controls:
        c.param = p
    

    如果你运行Controlled(),则self.param在初始化期间每次都会是-1else分支将打印This is not unexpected消息。

    for p in controls:
        c.param = p
    

    部分基本上只是更新类属性但不调用任何东西,不会打印或执行任何内容。


    我想你想实现这样的东西:

    controls = [0,1]
    
    class Controlled:
        def __init__(self, param=-1):
            self.param = param
            if self.param == 0:
                print(0)
            elif self.param == 1:
                print(1)
            else:
                print('This is not unexpected')
    
    results = []
    
    for p in controls:
        results.append(Controlled(p))
    

    当您调用__init__(self, param=-1) 时,将考虑给定参数(p),并根据给定参数运行初始化逻辑。

    【讨论】:

    • 感谢您的解决方案和更正。我也在考虑为每次运行保存一个列表或字典。
    猜你喜欢
    • 2018-11-26
    • 2018-06-15
    • 2011-09-27
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多