如何在Python类对象中创建唯一列表?

时间:2018-09-06 10:41:05

标签: python list object

我正在尝试制作一个python类,该类保留每个类的均匀分布的随机数列表,但是数字对于该类必须是唯一的。但是,每个新对象中的列表都是从第一个对象中复制的,而如果我手动将新值附加到第二个对象列表的内容中,则将相同的更改应用于第一个对象的列表,并且对于每个新类,我都会创建一个列表再次被复制,并附加我指定的许多值。

代码如下:

import random as random

class myClass:
    myRandomList = []

    def __init__(self, lengthOfList):
        for i in range(0,lengthOfList):
            self.myRandomList.append(random.uniform(-1.0,1.0))

a = myClass(2) #make a list with 2 random numbers
b = myClass(1) #make a list with 1 random number
print(a.myRandomList)
print(b.myRandomList)

以上代码的输出给出以下内容:

[0.3640932307078235, 0.8858169279430881, 0.18712932281033723]
[0.3640932307078235, 0.8858169279430881, 0.18712932281033723]

当它应该给出类似这样的信息时:

[0.3640932307078235, 0.8858169279430881]
[0.18712932281033723]

我如何做到这一点,以便在创建新类时仅为该类创建一个全新的值列表,而无需从先前实例化的对象中复制该列表并且不影响先前对象的列表?

3 个答案:

答案 0 :(得分:2)

我认为您想要的是对于一个类的每个 instance (即代码中的a和b)都有自己的随机数列表,与您创建实例时指定的长度匹配。为此,您应该在 init 中设置self.myRandomList。这是对原始代码的更改:

import random as random

class myClass:

  def __init__(self, lengthOfList):
    self.myRandomList = []
    for i in range(0,lengthOfList):
      self.myRandomList.append(random.uniform(-1.0,1.0))

a = myClass(2) #make a list with 2 random numbers
b = myClass(1) #make a list with 1 random number
print(a.myRandomList)
print(b.myRandomList)

您之前所做的是将myRandomList设置为类变量,该变量将始终由该类的所有实例共享,而不是由实例变量共享。有关更多详细信息,请参见此处:https://www.digitalocean.com/community/tutorials/understanding-class-and-instance-variables-in-python-3

希望有帮助!

答案 1 :(得分:1)

只需在self.myRandomList中声明__init__而不是在类声明中就可以了。

class myClass:
    def __init__(self, lengthOfList):
        self.myRandomList = []
        for i in range(0,lengthOfList):
            self.myRandomList.append(random.uniform(-1.0,1.0))

答案 2 :(得分:0)

如果要确保每个对象在所有实例中都具有唯一编号,则需要让每个实例根据<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/PageBackground"/> </layer-list> 级别class检查生成的值,以确保唯一性。

set