[英]python should class variables be initialised to a dummy value when real value is yet to be assigned?
我在 python 中有一個 class ,主要是 static 方法。 這些 static 方法將一些值分配給 class 變量,如下所示:
class A:
@staticmethod
def foo():
A.first = 20
@staticmethod
def foo2():
return A.first **2
在我的情況下, foo2
將始終在foo
之后運行。 我的問題是我應該first
初始化 class scope 中的一些虛擬值,例如:
class A:
A.first = None
@staticmethod
def foo():
A.first = 20
@staticmethod
def foo2():
return A.first **2
注意: IDE 在foo2
中訪問first
時unresolved attribute reference 'first' for class A
警告。 這個警告是合理的,這就是為什么我想first
初始化為一個虛擬占位符。
這里的最佳做法是什么?
我個人認為編寫代碼非常好,它被flake
、 flake8
、 prospector
、 pylint
或您的 IDE 使用的任何工具標記為干凈。
在某些情況下,這意味着編寫並非絕對必要的行或以稍微不同的方式重寫代碼只是為了取悅工具。 我認為主要是值得的。
在大多數情況下,它有助於避免難以閱讀的代碼或奇怪的錯誤。 這意味着,即使不是嚴格必要,最好使用虛擬值顯式聲明 class 變量,即使稍后將設置實際值。
閱讀您的代碼的人會更容易看到,您有 class 變量。
另一條評論:
盡管
class A:
...
@staticmethod
def foo():
A.first = 20
工作,這有點奇怪。
@staticmethod
適用於既不需要任何 class 屬性也不需要 class 實例的函數,但是您可以明確引用A
更常見的是這樣寫:
class A:
...
@classmethod
def foo(cls):
cls.first = 20
@classmethod
表示,您想要訪問 class 成員或其他 class 方法,但您不需要實例。 所以正是你試圖達到的目標。
這也有一個優點,如果您創建一個繼承自A
的 class (如果您曾經重命名 class ,則需要更改的行更少)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.