tutorial - ¿Cómo obtener el nombre de(sub) clase de un método estático en Python?
the django project (2)
Si yo defino:
class Bar(object):
@staticmethod
def bar():
# code
pass
class Foo(Bar):
# code
pass
¿Es posible que una función llame a Foo.bar () para determinar el nombre de clase Foo?
Reemplace el método estático con un método de clase. Esto se pasará a la clase cuando se llame, para que pueda obtener el nombre de la clase a partir de eso.
class Bar(object):
@classmethod
def bar(cls):
# code
print cls.__name__
class Foo(Bar):
# code
pass
>>> Bar.bar()
Bar
>>> Foo.bar()
Foo
Si necesita encontrar la información de la clase, la forma adecuada es usar @classmethod
.
class Bar(object):
@classmethod
def bar(cls):
# code
print(cls.__name__)
class Foo(Bar):
# code
pass
Ahora su método de bar
tiene una referencia a la clase como cls
que es la clase real de la persona que llama. Y como se muestra en el código, cls.__name__
es el nombre de la clase que está buscando.
>>> Foo.bar()
Foo
>>> Bar.bar()
Bar