Según tengo entendido, Python (2.5.2) no tiene soporte real para clases abstractas. ¿Por qué se queja piylint de que esta clase es una "clase abstracta no de referencia"? ¿Hará esto para cualquier clase que tenga NotImplementedError
lanzado?¿Qué hace que la gente piense que mi clase es abstracta?
Tengo cada clase en su propio archivo, si este es el caso, supongo que no tengo más remedio que suprimir este mensaje, pero espero que haya otra forma de evitarlo.
"""Package Repository interface."""
class PackageRepository(object):
"""Package Repository interface."""
def __init__(self):
self.hello = "world"
def get_package(self, package_id):
"""
Get a package by ID.
"""
raise NotImplementedError(\
"get_package() method has not been implemented")
def get_packages(self):
"""
Get all packages.
"""
raise NotImplementedError(\
"get_packages() method has not been implemented")
def commit(self):
"""
Commit all changes.
"""
raise NotImplementedError(\
"commit() method has not been implemented")
def do_something(self):
"""
Doing something.
"""
return self.hello
EDITAR
Tal vez debería aclarar. Me doy cuenta de que esta es una clase abstracta y me encantaría usar la palabra clave abstracta pero como entiendo, nada de eso importa en Python (al menos en la versión que estoy usando) así que no me molesté en hacer ningún truco abstracto divertido (como esos found here) y simplemente lo dejó afuera.
Me sorprendió ver que pilylint se da cuenta del hecho de que esta es una clase abstracta por sí misma. ¿Qué hace que la pildora determine que se trata de una clase abstracta? ¿Simplemente está buscando NotImplementedError
siendo arrojado a alguna parte?
¿Qué te hace decir que es ** no ** abstracto? Seguro que no se puede usar tal como es. Lanza excepciones para cada función de método. ¿A qué te refieres con "abstracto" si este no es un ejemplo? –
Es confuso para mí que Python no admita clases abstractas, pero pylint se quejará si se define una pero no se hace referencia dentro del mismo archivo. Me pregunto si estoy haciendo algo mal que está disparando esta advertencia. Prefiero tener todas mis clases en sus propios archivos, así que estoy obligado a toparme con esto a menudo y me gustaría saber si hay algo que debería estar haciendo más Pythonic que me ayudaría a superar esta advertencia. –
@Beau Simensen: ¿Por qué estás concentrado en una clase por archivo? Eso es muy no-Ptónico. De hecho, esa es la causa raíz de su problema. Nadie (especialmente no pilón) espera una clase por archivo. ¿Por qué lo haces de esta manera? Por favor actualice su pregunta con alguna explicación de por qué está haciendo esto. –