簡體   English   中英

python 中的動態 class 級別類型提示?

[英]Dynamic class level type hints in python?

我試圖在 PyCharm 中為特定的 class 動態提供類型提示,這意味着它的一個屬性在__init__期間分配了一個值,而它又是一個 ZA8CFDE6331BD59EB2AC96F8911C4B6666。

我嘗試為屬性定義 class 級別類型,但是屬性的類型可能是多個類之一,所以我不能真正指向特定類型,但我希望能夠自動完成在那個屬性上。

class Dynamic:
    def __init__(self):
        self.field1 = "field1"
        self.field2 = "field2"


class Reusable:
    def __init__(self, dynamics=None):
        if dynamics:
            self.values = dynamics
        else:
            self.values = "nothing"


dynamic_test = Dynamic()
test = Reusable(dynamics=dynamic_test)
print(test.values.)  # this is the place where auto-complete should take place

顯然,自動完成不會發生。 我嘗試了類似的事情

class Reusable:
    value_type = str  # type to-be-modified later
    values: value_type

    def __init__(self, dynamics=None):
        if dynamics:
            self.values = dynamics
        else:
            self.values = "nothing"
        Reusable.value_type = type(self.values)  # doesn't actually modify that so I won't have auto-complete based on type

我知道有一些可能涉及處理內置的__dir__ function,但是我也沒有得到任何運氣(不確定是否依賴於 PyCharm 的自動完成算法),也沒有任何插件朝這個方向開發。

有什么辦法可以讓我圍繞這個 go 並在這種情況下具有自動完成功能?

考慮使用類型提示:

from typing import Generic, TypeVar, Union

T = TypeVar("T")


class Reusable(Generic[T]):
    values: Union[str, T]

    def __init__(self, dynamics: T = None):
        if dynamics:
            self.values = dynamics
        else:
            self.values = "nothing"

在這里,我們將Reusable標記為可以用T參數化的 class 。

通過將dynamics標記為T ,我們可以指定在哪里獲得T的確切值。

Union[str, T]表示valuesstrT

有關詳細信息,請參閱PEP-484

暫無
暫無

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

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