簡體   English   中英

在Python類定義中調用靜態方法

[英]Calling a static method inside of a Python class definition

我有一個定義靜態方法的類定義。 我有一個字段,我想用靜態方法初始化。 我的默認思維導致我這樣:

class SomeConcreteClass(object):
    some_data = SomeConcreteClass.create_default_data()
    @staticmethod
    def create_default_data():
        return 'Foo'

問題是,當我運行它時,我得到一個NameError: name 'SomeConcreteClass' is not defined 這是有道理的,因為SomeConcreteClass正在構建。 這是否意味着我不能使用靜態init函數? 有沒有其他方法建議處理這種情況?

create_default_data的適當位置完全在類外。 然后你的問題消失了:

def create_default_data():
    return 'Foo'

class SomeConcreteClass(object):
    some_data = create_default_data()

如果你真的希望它作為類中的靜態方法也是如此:

def _create_default_data():
    return 'Foo'

class SomeConcreteClass(object):
    some_data = _create_default_data()
    create_default_data = staticmethod(_create_default_data)

但是靜態方法在Python中並不經常使用,因為除非它以某種方式在類上運行,否則不需要將函數放在類中。

我認為你不想這樣做。 不要忘記Python不是Java™...在類級別定義的屬性是類屬性,而不是實例屬性。 您幾乎肯定希望數據特定於實例,因此您應該在__init__方法中執行此操作。 如果你願意,你當然可以從該方法中調用classmethod,或者(更好)只需將代碼放在__init__

如果some_data是完全的輸出create_default_data (假設后者是確定在呼叫的情況下),那么為什么不干脆讓some_data一個@property

class SomeConcreteClass(object):
    @property
    def some_data():
        return 'Foo'

或者,但不等效,您可以為__init__每個實例初始化some_data

暫無
暫無

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

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