簡體   English   中英

跨子類共享 class int

[英]Shared class int across subclasses

我想要一個每次實例化子類時遞增的計數器。 我將如何實現這一點,以便下面的最后一條語句評估為 True:

class Abstract(ABC):
    counter = 0

class A(Abstract):
    pass
class B(Abstract):
    pass

a = A()
b = B()
a.counter += 1
b.counter == 1

目前每個子類都有自己的計數器,而不是共享超類中概述的計數器。

這對你有用嗎?

global_counter = 0


class Abstract:
    def __init__(self):
        global global_counter
        global_counter += 1


class A(Abstract):
    def __init__(self):
        super().__init__()


class B(Abstract):
    def __init__(self):
        super().__init__()


a = A()
b = B()

print(global_counter)    # (output: 2)

所以我已經實現了幾種不同的方法來實現我想要的:

  • 按照@nihilok 的建議使用全局關鍵字
  • 創建一個自定義計數器 class 來處理 integer 值(本質上是一個奇特的 int)。
  • 在 super class 中使用 int 類型,並讓它的方法使用超類的名稱直接引用它,而不是簡單地使用 class 方法中傳入的 cls。

我最喜歡的(最少的額外部分並且最符合我編寫對象的方式)是最后一種方法。 上面的內容轉化為:

lass Abstract(ABC):
    counter = 0
    @staticmethod
    def increment():
        Abstract.counter += 1. # instead of cls.counter += 1

class A(Abstract):
    pass
class B(Abstract):
    pass

a = A()
b = B()
a.increment()
b.increment()
a.counter == b.counter # now true. 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM