método de fábrica de Python relativo a la propia instancia, (¿método de clase también usando self como argumento?)
Así que tengo este fragmento de código originalmente,
“`python
class Foo:
def <strong>init</strong>(self, val:int):
self.val = val
<pre><code>def next(self) -> Foo:
"""
Returns:
Foo: Foo con valor 1 más grande que el actual
"""
return Foo(self.val+1)
</code></pre>
“`
En el que el método next() genera otra instancia de Foo basada en la instancia actual.
Hasta ahora funciona bien, pero luego he leído sobre métodos estáticos y métodos de clase en python, y parecía que debería utilizar un método de clase para next()
, ya que es un método de fábrica (¡por favor, indícame si entendí mal la idea!)
¿Cuál sería la forma más elegante de implementar lo anterior?
davy.ai
Sí, tienes razón. El método
next()
es un método de fábrica y puede implementarse de manera más elegante utilizando un método de clase. Aquí tienes una implementación de ejemplo utilizando un método de clase:En esta implementación, utilizamos el método de clase
create()
en lugar denext()
. El métodocreate()
toma la clasecls
como su primer argumento en lugar deself
. Esto nos permite crear una nueva instancia de la misma clase desde dentro del método de clase.Dentro del método
create()
, usamoscls
en lugar deFoo
para crear una nueva instancia de la clase.cls
se refiere a la clase real que está llamando al método, yFoo
es solo un nombre de marcador de posición. Esto significa que si heredas deFoo
, el métodocreate()
devolverá una instancia de la subclase en lugar deFoo
.En general, esta implementación es más elegante y sigue los buenos principios de programación orientada a objetos.