猿问

python:为每个新对象添加编号

我想在每次创建对象时更改对象的名称,以便每次创建对象时都会添加一个累加器。在这个例子中,我希望第一个 object.name 是 B1,然后第二个 object.name 是 B2,然后是 B3,依此类推。这就是我想要得到的


 class Object:

    def __init__(self):

         self.name = "B" + (accumulator)

这是我尝试过的,但我并没有真正到达任何地方


class BankAccount:

    def __init__(self, balance):

        self.account_number = "B" + str(number = number + 1)

        self.balance = balance

我想不出一种方法来避免尝试将变量设置为等于加一个本身的问题,因为它本身尚未定义。


喵喔喔
浏览 297回答 2
2回答

拉丁的传说

这里最简单的方法是一个类变量,它存储下一个要使用的值,在使用后递增:class BankAccount:    _nextnum = 1    def __init__(self, balance):        self.account_number = "B" + str(self._nextnum)        type(self)._nextnum += 1  # Must set it on the class, or you only make a shadowing instance attribute        self.balance = balance但是,如果没有锁定,这不是线程安全的,因此如果您想要线程安全,itertools.count可以以线程安全(至少在 CPython 上)的方式完成相同的工作:import itertoolsclass BankAccount:    _numgenerator = itertools.count(1)    def __init__(self, balance):        self.account_number = "B" + str(next(self._numgenerator))        self.balance = balance由于itertools.count的工作是在保持 GIL的 C 层完成的,因此它以原子方式运行,既返回下一个数字又将计数作为单个原子操作移动。
随时随地看视频慕课网APP

相关分类

Python
我要回答