Как сделать Obj-C Категории в Python?
Obj-C (который я не использовал в течение длительного времени) имеет то, что называетсякатегории продлить занятия. Объявляя категорию с новыми методами и компилируя ее в вашу программу, все экземпляры класса неожиданно получают новые методы.
У Python есть возможности mixin, которые я использую, но mixins нужно использовать снизу программы: класс должен объявить это сам.
Предусмотренный вариант использования категории: скажем, у вас есть большая иерархия классов, которая описывает различные способы взаимодействия с данными, объявляя полиморфные способы получения различных атрибутов. Теперь категория может помочь потребителю этих описывающих классов, реализовав удобный интерфейс для доступа к этим методам в одном месте. (Метод категории может, например, попробовать два разных метода и вернуть первое определенное (не None) возвращаемое значение.)
Любой способ сделать это в Python?
Иллюстративный коднадежда это проясняет, что я имею в виду. Дело в том, что категория похожа на совокупный интерфейс, который может изменить потребитель AppObj вего код.
class AppObj (object):
"""This is the top of a big hierarchy of subclasses that describe different data"""
def get_resource_name(self):
pass
def get_resource_location(self):
pass
# dreaming up class decorator syntax
@category(AppObj)
class AppObjCategory (object):
"""this is a category on AppObj, not a subclass"""
def get_resource(self):
name = self.get_resource_name()
if name:
return library.load_resource_name(name)
else:
return library.load_resource(self.get_resource_location())