Лучшая практика для использования метода класса аргумента
Я пытаюсь найти решение для следующей проблемы:
#ExampleA.py
class a:
def my_great_method_A(self):
pass
#ExampleB.py
def functionX(inst_a): #Argument 'inst_a' will be always ExampleA.py's class a.
inst_a.my_great_method_A() #<---
Я использую Liclipse в качестве редактора Python. Когда я набираю последнюю строку "a.my_gr...", я хочу, чтобы функция автозаполнения редактора включила функцию "my_great_method_A()". Тем не менее, это на самом деле ничего не говорит.
Я понимаю почему, потому что редактор не имеет никакого понятия, является ли 'inst_a' классом 'a'. Чтобы решить эту проблему, я мог бы сделать следующее, чтобы заставить автозаполнитель работать:
#ExampleA.py
class a:
def my_great_method_A(self):
pass
#ExampleB.py
import ExampleA
def functionX(inst_a): #Argument 'inst_a' will be always ExampleA.py's class a.
ExampleA.a.my_great_method_A(inst_a) #<--- then autofilling works
Однако для удобства чтения кода я бы предпочел использовать. формат и я верю всем одинаково. Но я не знаю, как все с этим справляются. Много раз мне приходилось заходить в импортированный файл и копировать и вставлять имя метода, что утомительно. Очевидно, мне не хватает чего-то, о чем все знают. Между прочим, это мой первый пост на stackru. Я надеюсь, что это правильная вещь для позы здесь.
2 ответа
LiClipse/PyDev может распознавать подсказки типов в строках документов (как описано в http://www.pydev.org/manual_adv_type_hints.html) или использовать новые подсказки типов PEP 484 ( https://www.python.org/dev/peps/pep-0484/)... Так что, если вы используете один из них, он должен работать.
Примечание: мне лично больше нравятся строки документации, но это, вероятно, дело вкуса, и оба должны быть узнаваемы по LiClipse/PyDev.
Я не знаю, как заставить этот редактор угадать тип, который вы ожидаете. Но поскольку Python нетипизирован, он всегда будет только догадываться.
Однако обратите внимание, что ваш обходной путь использования явного метода класса не является хорошей практикой. Это не позволит вам передавать расширения ExampleA в будущем, если ваш код будет развиваться когда-нибудь. Так что это больше, чем просто читабельность