У меня есть несколько классов, как показано ниже

from random import randint

class A:
    def __init__(self, name, value):
        self.name = name
        self.value = value

class B:
    var_1 = A('a', randint(10, 20))

Я хочу, чтобы каждый экземпляр создания из class B, var_1 имел разное значение.

Пример:

B().var_1.value != B().var_1.value 

Я знаю, что если я перейду var_1 из class variable в instance variable, у меня будет другое.

0
Peep Peep Peep 6 Ноя 2019 в 05:02
1
«Я хочу, чтобы каждый экземпляр create из класса B, var_1 имел разное значение». Затем используйте переменную экземпляра. Вот для чего они нужны.
 – 
juanpa.arrivillaga
6 Ноя 2019 в 05:04
«Я знаю, что если я перенесу var_1 из переменной класса в переменную экземпляра, у меня будет другое». Это ответ на ваш собственный вопрос, не так ли?
 – 
kaya3
6 Ноя 2019 в 05:06
@ juanpa.arrivillaga, Нет var_1 все еще переменная класса
 – 
Peep Peep Peep
6 Ноя 2019 в 05:07
1
Так почему бы не сделать его переменной экземпляра, если это будет делать то, что вы хотите?
 – 
kaya3
6 Ноя 2019 в 05:08
1
Почему? Это как сказать: «Я хочу синюю машину, но хочу, чтобы она была красной, но все же синей».
 – 
user2357112 supports Monica
6 Ноя 2019 в 05:15

1 ответ

Вы должны заменить var_1 на переменную экземпляра, если вам требуется, чтобы разные экземпляры класса B имели разные значения, хранящиеся в var_1. Значение переменной класса по определению распределяется между экземплярами, а это не то, что вам нужно.

Вот модифицированная версия вашей программы:

#!/usr/bin/env python3

class A:
    def __init__(self, name, value):
        self.name = name
        self.value = value

class B:
    __value = 0
    def __init__(self):
        B.__value += 1
        self.var_1 = A('a', B.__value)

print(B().var_1.value != B().var_1.value)

Он всегда печатает True.

Каждый раз, когда создается экземпляр B, его переменная класса __value увеличивается на 1, а его значение сохраняется в переменной экземпляра var_1. Это гарантирует, что значение всегда будет разным, в отличие от вашего кода, где существует вероятность того, что два экземпляра имеют одно и то же число, поскольку значение генерируется случайным образом.

0
Daniel Jonsson 6 Ноя 2019 в 05:25