¿Cómo se puede hacer un método de clase estático después de definir la clase? En otras palabras, ¿por qué falla el tercer caso?Crear método estático a partir de un método existente fuera de la clase? (error de "método sin encuadernar")
>>> class b: ... @staticmethod ... def foo(): ... pass ... >>> b.foo() >>> class c: ... def foo(): ... pass ... foo = staticmethod(foo) ... >>> c.foo() >>> class d: ... def foo(): ... pass ... >>> d.foo = staticmethod(d.foo) >>> d.foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method foo() must be called with d instance as first argument (got nothing instead)
¿No debería ser 'd.foo.im_func'? –
Sí, gracias. ¡Fijo! – kindall
Bueno, necesitas marcarlos con 'método estático' para llamarlos de manera equivalente en las instancias, no solo en la clase misma. 'd.foo()' funciona con o sin envoltura 'staticmethod', pero' d(). foo() 'explotaría (intentaría pasar' self', que 'foo' no acepta). Claro, no hay ninguna función relacionada con la instancia que requiera llamarlos en una instancia, pero para DRY, los métodos que hacen referencia al método estático pueden y deben llamarlo como 'self.foo()' en lugar de nombrar explícitamente la clase. – ShadowRanger