2015-10-28 4 views
0

Я определение методаТип намекая: аргумент типа класса

def foo_my_class(my_class: ???, bar: str) -> None: 
    """ Operate on my_class """ 

Интересно, как я могу использовать функцию намекая типа, чтобы указать, что класс должен быть принят в первом аргументе.

В принципе, что я должен поставить вместо ??? отметить там? Благодарю.

UPD: Вот еще более конкретный код, который я пытаюсь достичь.

class Base(object): 
    """base class""" 

class X(Base): 
    """some class""" 

class Y(Base): 
    """some other class""" 

foo_my_class(X, "foo")  
foo_my_class(Y, "bar") 

ответ

1

Вы просто используете сам класс.

def foo_my_class(my_class: MyClass, bar: str) -> None: 

От the PEP (курсив мой):

Тип подсказки могут быть встроенные классы (в том числе тех, которые определены в стандартной библиотеки или расширения сторонних модулей), абстрактные базовые классы, типы доступны модуль types и определяемые пользователем классы (включая те, которые определены в стандартной библиотеке или сторонних модулях).

+0

Я обновил свой вопрос. Кажется, ваше решение работает, если я заполняю аргумент my_class, является одним из базовых подклассов. Это нормально в моем случае. Однако, если мне нужно заставить my_class принять какой-либо класс, мне нужно использовать тип '' type'' (my_class: type, ...) – anti1869

0

Я мог бы быть не так, как я не получаю вниз и грязные в Python 3.5 как еще, но, глядя на documentation вы должны быть в состоянии сделать это с typing.Optional. Краткий пример.

>>> from typing import Optional 
>>> 
>>> class MyClass(object): 
>>>  def __init__(self): 
>>>   self.a = 1 
>>> 
>>> O = Optional[MyClass] 
>>> 
>>> def test(x: O) -> int: 
>>>  return x.a 
>>> 
>>> myclass = MyClass() 
>>> print test(myclass) 
1 

Надеюсь, что это поможет.

Смежные вопросы