Pergunta

Existe algo como o Python descritor de protocolo implementado em outros idiomas?Ele parece um bom caminho para aumentar a modularidade/encapsulamento sem inchaço sua classe que contém a implementação, mas eu nunca ouvi falar de coisa semelhante em outros idiomas.É provável ausência de outras línguas por causa da sobrecarga de pesquisa?

Foi útil?

Solução

Eu não ouvi de um equivalente directo quer.Você provavelmente poderia obter o mesmo efeito com macros, especialmente em uma língua como o Lisp o que foi extremamente poderoso de macros.

Eu não estaria em todos os surpreso se outros idiomas começam a incorporar algo semelhante porque ele é tão poderoso.

Outras dicas

Ruby e C# facilmente permitem que você crie acessores especificando getter/setter para um atributo, como o Python.No entanto, este não foi projetado naturalmente para permitir que você escreva o código para esses métodos de outra classe, a forma que o Python permite.Na prática, eu não tenho certeza quanto a esta matéria, uma vez que cada vez que eu vi um atributo definido através do descritor de protocolo foi implementado na mesma classe.

EDITAR:Danado minha dislexia o que quero leitura descuidada).Por algum motivo eu sempre leia "descritor" como "decorador" e vice-versa, mesmo quando estou a escrever um tanto de-los.Eu vou deixar o meu post intacta, pois tem informações válidas, embora as informações que não tem absolutamente nada a ver com a questão.

O termo "decorador" em si, na verdade, é o nome de um padrão de projeto descrito na famosa "Padrões de Projeto", o livro.O artigo da Wikipédia contém muitos exemplos em diferentes linguagens de programação de decorador de uso: http://en.wikipedia.org/wiki/Decorator_pattern

No entanto, os decoradores em que o artigo orientada a objeto;eles têm aulas de implementar uma determinada interface que deixa o outro de classe existentes se comportam de maneira diferente, de alguma forma, etc.Python decoradores agir de forma funcional, substituindo uma função em tempo de execução com outra função, permitindo que você efetivamente modificar/substituir essa função, insira o código, etc.

Isto é conhecido no mundo Java como programação Orientada a Aspectos, e o compilador Java AspectJ permite fazer esses tipos de coisas e compilar o código AspectJ (que é um subconjunto do Java) em bytecode Java.

Eu não estou familiarizado o suficiente com C# ou Ruby para saber o que a sua versão de decoradores seria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top