class Duck为每个duck对象创建随机初始化的数字

ars*_*612 1 python class object

我正在写一个Duck类,这样创建的每个Duck对象都包含翼展和权重字段变量.对于每只鸭子,应该随机初始化每一个.应将翼展初始化为[80.0,100.0] cm范围内的随机浮动.重量应在[0.7,1.6] kg范围内随机初始化.

我认为这很简单,但出于某种原因我的输出是完全错误的:

import random
class Duck:

    wingspan = round(random.uniform(80.0, 100.0), 1)
    weight = round(random.uniform(0.7,1.6), 2)
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似于此的输出:

>>> duck1 = Duck()
>>> print(duck1.wingspan)
  83.2
>>> print(duck1.weight)
  0.93
>>> duck2 = Duck()
>>> print(duck2.wingspan)
  97.5
>>> print(duck2.weight)
  1.32
Run Code Online (Sandbox Code Playgroud)

但我继续为两只鸭子获得相同的翼展和体重输出:

>>> duck1 = Duck()
>>> print(duck1.wingspan)
  83.2
>>> print(duck1.weight)
  0.93
>>> duck2 = Duck()
>>> print(duck2.wingspan)
  83.2
>>> print(duck2.weight)
  0.93
Run Code Online (Sandbox Code Playgroud)

Ziz*_*212 5

您已经创建了类变量,而不是实例变量.这意味着这些类对于该类的所有实例都是相同的值.只需将它们分配给实例:

import random
class Duck:
    def __init__(self):
        self.wingspan = round(random.uniform(80.0, 100.0), 1)
        self.weight = round(random.uniform(0.7,1.6), 2)
Run Code Online (Sandbox Code Playgroud)