如何在Python类对象之间建立唯一的列表?

2024-05-04 17:42:44 发布

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

我正在尝试创建一个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]

如何使它在创建一个新类时,只为该类创建一个全新的值列表,而不复制以前实例化对象的列表,也不影响以前对象的列表?你知道吗


Tags: 对象代码self列表makewithmyclassrandom
3条回答

只需在__init__中声明self.myRandomList,而不是在类声明中声明即可。你知道吗

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

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

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

希望有帮助!你知道吗

如果要确保每个对象在所有实例中都有唯一的编号,则需要让每个实例对照class级别set检查生成的值,以确保唯一性。你知道吗

import random as random

class MyClass:

    class_random_set = set()

    def __init__(self, lengthOfList):
        self.my_random_set = set()
        for _ in range(0, lengthOfList):
            while True:
                num = random.uniform(-1.0, 1.0)
                if num not in self.class_random_set:
                    self.class_random_set.add(num)
                    self.my_random_set.add(num)
                    break


a = MyClass(2) #make a set with 2 random numbers
b = MyClass(1) #make a set with 1 random number
print(a.my_random_set)
print(b.my_random_set)

相关问题 更多 >