Como fazer Categorias Obj-C em Python?
Obj-C (que eu não uso há muito tempo) tem algo chamadocategorias para estender classes. Declarando uma categoria com novos métodos e compilando-a em seu programa, todas as instâncias da classe de repente possuem os novos métodos.
O Python tem possibilidades de mixagem, que eu uso, mas mixins devem ser usados a partir do final do programa: a classe tem que declarar ele mesmo.
Caso de uso da categoria Previsto: digamos que você tenha uma hierarquia de classes grande que descreva formas diferentes de interagir com dados, declarando formas polimórficas de obter atributos diferentes. Agora, uma categoria pode ajudar o consumidor dessas classes descrevendo implementando uma interface conveniente para acessar esses métodos em um único local. (Um método de categoria poderia, por exemplo, tentar dois métodos diferentes e retornar o primeiro valor de retorno definido (não-Nenhum).)
Qualquer maneira de fazer isso em Python?
Código ilustrativoI esperança isso esclarece o que quero dizer. O ponto é que a categoria é como uma interface agregada, que o consumidor do AppObj pode mudar emEstá código.
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())