在列表中添加新对象时,所有对象看起来都像上一个

2024-05-23 14:30:24 发布

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

我正在用Python编写我的第一个程序。我需要向列表中添加对象,并在FOR循环中创建这些对象。问题是,在填充列表之后,如果我检查任何对象的值,它们看起来都像最后添加的对象。你知道吗

class clsNumeros:

    numero = 4
    oper = [int() for i in range(5)]

    def __init__(self, op1, op2, op3, op4):
        self.oper[1] = op1
        self.oper[2] = op2
        self.oper[3] = op3
        self.oper[4] = op4

    def CountOperaciones():
        return 5

    def GetValorOper(self, idxOper):
        num = self.oper[idxOper]

        if num == 1:
            return num
        elif num == 2:
            return sqrt(num)
        elif num == 3:
            return Factorial(num)
        elif num == 4:
            return 4/10
        elif num == 5:
            return sqrt(0.4)

    def GetExprOper(self, idxOper):
        num = self.oper[idxOper]

        if num == 1:
            return num
        elif num == 2:
            return "R(" + num + ")"
        elif num == 3:
            return num + "!"
        elif num == 4:
            return "0.4"
        elif num == 5:
            return "R(0.4)"

    def Display(self):

        txt = ""

        for x in range(1, 5):
            txt = txt + str(self.oper[x])
            txt = txt + " ___ "

        print (txt)



def GeneraNumeros():
    c = []
    idx = [int() for i in range(5)]
    i = 0
    idx[1] = 1
    idx[2] = 1
    idx[3] = 1
    idx[4] = 1
    looping = 1
    n = 0

    while looping == 1:
        num = clsNumeros(idx[1], idx[2], idx[3], idx[4])
        c.append(num)
        n = n + 1
        idx[4] = idx[4] + 1
        for i in range (4, 1, -1):
            if idx[i] > clsNumeros.CountOperaciones():
                idx[i] = 1
            idx[i-1] = idx[i-1] + 1
        if idx[1] > clsNumeros.CountOperaciones():
            looping = 0

        c[5].Display()  # this is for displaying object number 5. All of them look like the last one

    return numeros        

有什么问题吗?我可以在FOR循环中创建对象并期望它们是唯一的吗? 这个主意对我很管用ASP.NET. 你知道吗

谢谢!你知道吗


Tags: 对象inselftxtforreturnifdef
1条回答
网友
1楼 · 发布于 2024-05-23 14:30:24

问题在于:

class clsNumeros:

    oper = [int() for i in range(5)]

在类定义时,类变量只计算一次。因此,这里只创建一个list实例。通过在构造函数中初始化oper来解决这个问题。你知道吗

其他问题:

  • 你可以说0而不是int()
  • 你可以说[0]*5而不是[0 for i in range(5)]
  • 命名约定:Python使用method_nameClassName,最好遵循它们
  • 养成编写class clsNumeros(object)的习惯,因为另一种(旧的)语法会导致Python中的“旧样式”类的行为有些不同
  • 您可以使用str.join方法来简化方法Display,例如'__'.join(items)

相关问题 更多 >