如何理解将变量传递给“ @classmethod”构造函数的不同方式

时间:2019-08-05 14:19:19

标签: python class constructor class-method

这是粒子类。当我初始化不同的粒子“ byPosition”方法时,这些粒子共享“ self.position”变量,那么为什么共享“ self.position”变量的人有理想的想法?

t1.id < t2.id

“ byPosition”中的“ position”是从“ QPointF(0,0)”传递的 我创建了两个“ byPosition”粒子对象,并赋予它们随机速度,并计算下一帧中每个对象的位置。

我希望看到两个不同点的路径。 但是,这两个对象共享“ self.position”数据。 尽管它们具有不同的速度。

按如下所示编辑“ byPosition”方法后,一切正常。 我只是有点听不懂。

import random
from PyQt5.QtCore import QPointF
from PyQt5.QtGui import QPen, QColor

class Particle:
    seed = False

    def __init__(self, velocity, position, h, seed):
        self.hue = h

        self.acceleration = QPointF(0, 0)
        self.velocity = velocity
        self.position = position
        self.seed = seed

    @classmethod
    def byXY(cls, x, y, h):
        lowVel = -11 * (y / 480)
        highVel = -5 * (y / 480)
        velocity = QPointF(0, random.uniform(lowVel, highVel))
        position = QPointF(x, y)

        return cls(velocity, position, h, True)

    @classmethod
    def byPosition(cls, position, h):
        mul = random.uniform(6, 9)
        randomVel = [random.uniform(-1, 1) * mul for i in range(2)]
        velocity = QPointF(randomVel[0], randomVel[1])
        position = position

        return cls(velocity, position, h, False)

我发现了类似的问题,@classmethod for constructor overloading

0 个答案:

没有答案