亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python:為每個新對象添加編號

python:為每個新對象添加編號

喵喔喔 2021-11-02 15:42:53
我想在每次創建對象時更改對象的名稱,以便每次創建對象時都會添加一個累加器。在這個例子中,我希望第一個 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我想不出一種方法來避免嘗試將變量設置為等于加一個本身的問題,因為它本身尚未定義。
查看完整描述

2 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

這里最簡單的方法是一個類變量,它存儲下一個要使用的值,在使用后遞增:


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 itertools


class BankAccount:

    _numgenerator = itertools.count(1)

    def __init__(self, balance):

        self.account_number = "B" + str(next(self._numgenerator))

        self.balance = balance

由于itertools.count的工作是在保持 GIL的 C 層完成的,因此它以原子方式運行,既返回下一個數字又將計數作為單個原子操作移動。


查看完整回答
反對 回復 2021-11-02
  • 2 回答
  • 0 關注
  • 318 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號