类对象的动态实例覆盖每个对象

2024-09-30 12:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个存储简单数据的简单类。课程如下。你知道吗

class DataFormater:

    def __init__(self, N, P, K, price):

       self.N = N
       self.P = P
       self.K = K
       self.price = price

调用此类的代码是

from DataFormater import DataFormater

#global variables
ObjectList = [0,1,2,3,4,5,6,7,8,9,10,
              11,12,13,14,15,16,17,18,19,20,
              21,22,23,24,25,26,27,28,29,30,
              31,32,33,34,35,36,37,38,39,40,
              41,42,43,44,45,46,47,48,49,50]
ObjectListCounter = 0

# main
print "enter you N-P-K values, followed by a coma, then the price"
print "example ---->  5 5 5 %50 "
print "return as many values as you want to sort, then enter, 'done!' when done."

while True:
    RawData = raw_input()
    if RawData == 'done!':
        break

    else:

        ObjectList[ObjectListCounter] = DataFormater
        ObjectList[ObjectListCounter].N = int(RawData[0])  
        # very simple test way of putting first indice in ObjectList[ObjectListCounter].N
        ObjectListCounter += 1

print ObjectList[0].N
print ObjectList[1].N

我的想法是ObjectList[0]将创建我可以用1.N调用的对象“1”

但是,当我调用这些时,似乎覆盖了前面的实例。你知道吗

这就是指纹。。。你知道吗

return as many values as you want to sort, then enter, 'done!' when done.
12
1
done!
1
1

非常感谢!我知道我的帖子很乱,我不知道如何让它更“漂亮”


Tags: selfyoureturnaspricemanyvaluesprint
1条回答
网友
1楼 · 发布于 2024-09-30 12:15:58

因此,看起来您正在循环中分配实际的类(而不是类的实例)。在这里您可以这样做:

ObjectList[ObjectListCounter] = DataFormater

我想你真正想要的是这个

ObjectList[ObjectListCounter] = DataFormater(...insert args here....)

编辑以处理评论:

类初始化方法如下所示:

def __init__(self, N, P, K, price):

这意味着要创建类的实例,它将如下所示:

my_formater = DataFormater(1, 2, 3, 4)

然后就可以访问值为1my_formater.N。你知道吗

您要做的是访问类级属性DataFormater.N。这通常用于在类实例之间具有不变变量的情况。例如:

class DataFormater():

    CONSTANT_THING = 'my thing that is always the same for every instance'

然后就可以直接从类中访问该变量,如下所示:

DataFormater.CONSTANT_THING

我希望这能把事情弄清楚。你知道吗

相关问题 更多 >

    热门问题