Tenho uma classe que declara uma propriedade em Python, a implementação padrão para esse método é pass
, por exemplo:
class A:
@property
def something(self):
pass
Esta propriedade tem como objetivo declarar uma funcionalidade para estender classes, e eu quero usá-la para declarar um campo, onde se as classes de extensão a implementarem, o campo será inicializado com algum valor, e se não, o valor do campo será None
.
Como posso verificar se os usuários implementaram?
Tentei usar __code__
e hasattr()
mas não funcionou.
Verifique no inicializador, onde você está definindo o valor padrão para o atributo, se a
something
propriedade foi modificada na classe da instância ou se ela não foi modificada na implementação da classe base e defina o valor do atributo com base no resultado dessa verificação:Quais saídas:
Como alternativa, você pode usar uma propriedade para verificar cada vez que o atributo for consultado:
Ou, se você quiser um atributo de classe (em vez de um atributo de instância), defina o atributo na subclasse em
__init_subclass__
:Crie uma função personalizada
property
por subclasse. Useinspect.getsource
para verificar se há um corpo semelhante ao da funçãopass
.Saída
Observe que
pass
"analisador" pode ser tornado mais robusto usando expressões regulareslogging
, em vez de um simplesprint
, é possível rastrear quando uma implementação é adicionada