2017-06-02 18 views
5

Tôi đang thử sử dụng Python type annotations với lớp trừu tượng. chức năng My __init__ trông như thế này:Nhập chú thích có nhiều loại trong ** kwargs

from abc import ABCMeta 

class SomeClass(object, metaclass=ABCMeta): 
    def __init__(self, *args, **kwargs): 
     print("Initiating %s object.", self.__class__.__name__) 

     self.username = kwargs['data'] 
     assert isinstance(self.username, str) 

     is_premioum = kwargs.get('premioum', False) 

     self.money_investmant = kwargs.get('investmant') 
     if isinstance(self.money_investmant, str): 
      self.money_investmant = float(self.money_investmant) 

Như bạn có thể thấy, có thể chứa kwargs lập luận từ một số một số types- float, boolstr.

Bây giờ, tôi đang cố gắng để viết kiểu chú thích cho hàm, trông như thế này:

def __init__(self, *args, **kwargs: Union[bool, str, float]) -> None: 

Nhưng PyCharm IDE của tôi báo cho tôi:

Trừ gõ 'Integral', có 'str' thay

Và:

Không thể tìm thấy tham chiếu 'get' trong bool | str | float '

Tôi có làm gì sai không?

Tôi nên viết chú thích loại cho kwarg nếu nó chứa đối số từ nhiều loại như thế nào?

Trả lời

2

Xem this bugthis bug trên bộ theo dõi vấn đề cho PyCharm. Đây rõ ràng là một vấn đề với kiểm tra của PyCharm; mypy (một trình kiểm tra kiểu khác cho Python) không khiếu nại khi tôi thực thi mã tương tự.

Đã có bản sửa lỗi cho điều này và dường như có sẵn in build 171.2014.23. Cho đến lúc đó, tôi giả sử Anysẽ đủ để giải quyết tạm thời để người kiểm tra ngừng khiếu nại.

Các vấn đề liên quan