class Base(object):
field = 0
class Sub1(Base):
field1 = 1
class Sub2(Base):
field2 = 2
class NotSubclass(object):
field3 = 3
def some_func(SomeClass):
# type: (T <= Base) -> None
print SomeClass # если тут сделать "SomeClass." (поставить точку),
# то выпадающее меню после точки не предлагает список атрибутов нужных классов
если тут сделать "SomeClass." (поставить точку), то выпадающее меню после точки не предлагает список атрибутов нужных классов
# -*- coding: utf-8 -*-
from typing import Type
class Base(object):
field = 0
class Sub1(Base):
field1 = 1
class Sub2(Base):
field2 = 2
class NotSubclass(object):
field3 = 3
def some_func(cls):
# type: (Type[Base]) -> None
print cls.field
# то выпадающее меню после точки не предлагает список атрибутов нужных классов
some_func(Base)
some_func(NotSubclass) # error indicated
А зачем?
Pycharm обладает всеми необходимыми данными о структуре проекта, он даже постоянно держит в голове абстрактное синтаксическое дерево всего кода. Стало быть, инспектировать тайп хинты он может и без лишних импортов. Об этом свидетельствует тот факт, что даже если ему указать в импорте не установленный модуль typing, хинтинг сразу начинает работать как положено.
если я правильно понял, что имеется в виду
def foo(SomeClass):
"""
:type SomeClass: Base
"""
нужно было написать, что для 2.7 версии
Используйте docstring annotation
Если посмотрите, в коде не создается ни одного экземпляра.
Экземпляр создается на основе объекта класса
Расшифруйте, что вы понимаете под хинтингом для класса
"""
:type SomeClass: Base
"""
могу только объяснить, чем класс отличается от объекта.
class Foo:
pass
bar = Foo()
print type(Foo), id(Foo)
print type(type(Foo)), id(type(Foo))
print type(bar), id(bar)
class Base(object):
def __init__(self, data):
self.data = data
def __repr__(self):
return '<{} ({})>'.format(self.__class__.__name__, self.data)
class Dark(Base):
x = 0
class Light(Base):
x = 255
def data_factory(data, Type1, Type2):
delta1 = abs(data - Type1.x)
delta2 = abs(data - Type2.x)
if delta1 < delta2:
SelectedType = Type1
else:
SelectedType = Type2
obj = SelectedType(data)
return obj
print data_factory(10, Dark, Light) # >>> <Dark (10)>
print data_factory(126, Dark, Light) # >>> <Dark (126)>
print data_factory(129, Dark, Light) # >>> <Light (129)>
print data_factory(250, Dark, Light) # >>> <Light (250)>
"""
:type SomeClass: object
"""