Articles of clase método

¿Por qué usar el método de clase en lugar del método estático?

Sé lo que hacen y he visto muchos ejemplos de ambos, pero no he encontrado un solo ejemplo en el que tendría que usar el classmethod de classmethod lugar de reemplazarlo con un staticmethod . El ejemplo más común de classmethod de classmethod que he visto es para crear una nueva instancia de la clase […]

¿Por qué siempre agregar uno mismo como primer argumento a los métodos de clase?

Posible duplicado: ¿Por qué necesita explícitamente tener el argumento “self” en un método de Python? Entiendo por qué el yo es siempre el primer argumento para los métodos de clase, esto tiene mucho sentido, pero si es así, entonces, ¿por qué pasar por la molestia de escribir si para cada definición de método? ¿Por qué […]

Métodos de escritura y clase de pato (o, ¿cómo usar un método de una clase y una instancia?)

Tengo un código que me gustaría pasar instancias o clases de manera intercambiable. Todo lo que haré en ese código es llamar a un método que espero que tengan tanto las clases como las instancias (el método go() en el siguiente ejemplo). Desafortunadamente, no puedo crear un método de clase con el mismo nombre de […]

Python: Cómo llamar a un método de instancia desde un método de clase de la misma clase

Tengo una clase de la siguiente manera: class MyClass(object): int = None def __init__(self, *args, **kwargs): for k, v in kwargs.iteritems(): setattr(self, k, v) def get_params(self): return {‘int’: random.randint(0, 10)} @classmethod def new(cls): params = cls.get_params() return cls(**params) Y me gustaría poder hacer: >>> obj = MyClass.new() >>> obj.int # must be defined 9 Quiero […]

¿Es una mala forma llamar a un método de clase como un método desde una instancia?

Ex. Si tengo algo como esto: class C(object): @classmethod def f(cls, x): return x + x Esto funcionará: c = C() cf(2) 4 ¿Pero es esa mala forma? Solo debería llamar Cf() o c.__class__.f() Obviamente, esto solo tendría sentido en los casos en que f no interactúe con self / cls esperando que sea de […]

¿Convertir un objeto BaseClass en un objeto SubClass idiomáticamente?

Hay una clase base Base y una subclase Special . class Base(object): def __init__(self, name): self.name = name def greet(self): return ‘Hello %s’ % self.name class Special(Base): def __init__(self, name): super(Special, self).__init__(name) def rhyme(self): return ‘Hi %s! How are you? Fine, thanks. What about you?’ % self.name ¿Cómo puedo convertir una instancia de Base en […]

Agregar dinámicamente métodos de clase a una clase

Tengo el siguiente fragmento de código: FEED_TYPES = [ (‘fan_mail’, ‘Fan Mail’), (‘review’, ‘Review’), (‘tip’, ‘Tip’), (‘fan_user’, ‘Fan User’), (‘fan_song’, ‘Fan Song’), (‘fan_album’, ‘Fan Album’), (‘played_song’, ‘Played Song’), (‘played_album’, ‘Played Album’), (‘played_radio’, ‘Played Radio’), (‘new_event’, ‘New Event’), ] class Feed: @classmethod def do_create(cls, **kwargs): print kwargs @classmethod def create(cls, type, **kwargs): kwargs[‘feed_type’] = type cls.do_create(**kwargs) […]

¿Hay alguna manera de crear una propiedad de clase en Python?

Lo siguiente no funciona por alguna razón: >>> class foo(object): … @property … @classmethod … def bar(cls): … return “asdf” … >>> foo.bar >>> foo.bar + ‘\n’ Traceback (most recent call last): File “”, line 1, in TypeError: unsupported operand type(s) for +: ‘property’ and ‘str’ ¿Hay alguna manera de hacer esto, o es mi […]

¿Cómo la asignación de una función como atributo de clase se convierte en un método en Python?

>>> class A(object): pass >>> def func(cls): pass >>> A.func = func >>> A.func ¿Cómo esta asignación crea un método? Parece poco intuitivo que la asignación haga lo siguiente para las clases: Convierte las funciones en métodos de instancia no unidos Convierta las funciones envueltas en classmethod() en métodos de clase (en realidad, esto es […]

super y __nueva__ confusión

Como lo que acabo de aprender, puedo usar super() esta manera: super(class, obj_of_class-or-_subclass_of_class) El código va abajo: #Case 1 class A(object): def __init__(self): print “A init” class B(A): def __init__(self): print “B init” super(B, self).__init__() #ok, I can invoke A’s __init__ successfully #Case 2 class A(object): @classmethod def foo(cls): print “A foo” class B(object): @classmethod […]