одинаковый результат random.randrange в конструкторе класса

Есть код. Он создает несколько классов. атрибут класса b создается случайно. Но во всех классах, которые создаются за время работы программы значения атрибутов одинаковы. Почему?

from random import randrange
from time import sleep

class A:
    def __init__(self, b=randrange(0, 10)):
        self.b = b


if __name__ == '__main__':
    for i in range(5):
        a = A()
        print(a.b)
        sleep(1)

Я сначала думал, что результат randrange зависит от времени, но даже если добавить задержку, ничего не поменяется.


Ответы (2 шт):

Автор решения: dIm0n

Значение дефолтного параметра вычисляется 1 раз. Попробуйте так:

from random import randrange
from time import sleep

class A:
    def __init__(self):
        self.b = randrange(0, 10)


if __name__ == '__main__':
    for i in range(5):
        a = A()
        print(a.b)
        sleep(1)
→ Ссылка
Автор решения: S. Nick

Попробуйте так:

from random import randrange
#from time import sleep

class A:
    def __init__(self, b=777):
        self.b = b


if __name__ == '__main__':
    for i in range(5):
        
        a = A(randrange(0, 10))            # <---
        print(a.b)
        #sleep(1)
→ Ссылка