2017-11-26 5 views
3

クラスのインスタンスを作成するメソッドを持つクラスがあります。 なぜ私は、引数が多すぎると言っているのですか?

class Bar: 
    @classmethod 
    def create(cls, foo: int): 
     return cls(foo) 

    def __init__(self, foo: int) -> None: 
     pass 

私はそれに対してmypy実行

は、それが mypytest.py:4: error: Too many arguments for "Bar"

これが正常に動作しますので、それは私にはバグのように思えるが

class Bar: 
    @classmethod 
    def create(cls, foo): 
     return cls(foo) 

    def __init__(self, foo: int) -> None: 
     pass 

私は理解していないと言う理由は、クラスメソッドましたインスタンスの作成を中断するパラメータの型を定義します。何か不足していますか?

答えて

2

答えは簡単です。ちょうど__init__メソッドを先に配置してください。たとえば、これは正常に動作します:__init__(または__new__)はクラス定義の最初の方法ではない場合

class Bar: 
    def __init__(self, foo: int) -> None: 
     pass 

    @classmethod 
    def create(cls, foo: int): 
     return cls(foo) 

は、いくつかの技術的な理由から、mypyは現在、いくつかのコーナーケースで予期せずに動作します。私はすでに同様の問題を抱えていると思いますが、mypyトラッカーで問題を見つけることはできません。

+0

基本的に、それはミーピーバグです。 – user2357112

+0

@ user2357112バグとして提出:https://github.com/python/mypy/issues/4290 – McKay

+0

この問題を回避していただきありがとうございます。私は通常、私の静的な/クラスのメソッドが最初に好きですが、私はむしろクリーンなマイパイの健康保険金を持っています。 – McKay

関連する問題