programacion - objeto de clase vacío python
poo python 3 (4)
Prueba con lambda
:
john.greet = lambda : print( ''hello world!'' )
Lo que podrás hacer:
john.greet()
EDITAR : Gracias Thomas K por la nota: esto funciona en Python 3.2
y no en Python2, donde la print
parece ser una statement
. Pero esto funcionará para lambda
s, sin declaraciones (¿verdad? Lo siento, solo sé que python3.2
( python3.2
Estoy enseñando una clase de Python en Programación Orientada a Objetos y mientras estoy repasando cómo explicar las Clases, vi una definición de clase vacía:
class Employee:
pass
el ejemplo continúa definiendo un nombre y otros atributos para un objeto de esta clase:
john = Employee()
john.full_name = "john doe"
¡interesante!
Me pregunto si hay una forma de definir dinámicamente una función para una instancia de una clase como esta. algo como:
john.greet() = print ''hello world!''
esto no funciona en mi intérprete de Python, pero ¿hay alguna otra forma de hacerlo?
Puedes usar AttrDict
>>> from attrdict import AttrDict
>>> my_object = AttrDict()
>>> my_object.my_attribute = ''blah''
>>> print my_object.my_attribute
blah
>>>
Instalar attrdict desde PyPI:
pip install attrdict
También es útil en otras situaciones, como cuando se necesita acceso de atributos a las claves dict.
También puede usar "tuplas con nombre" del módulo estándar de la collection
. Las tuplas con nombre funcionan como tuplas "ordinarias" pero los elementos tienen nombres y puede acceder a los elementos usando la "sintaxis de punto". De la colección documentos :
>>> # Basic example
>>> Point = namedtuple(''Point'', [''x'', ''y''])
>>> p = Point(11, y=22) # instantiate with positional or keyword arguments
>>> p[0] + p[1] # indexable like the plain tuple (11, 22)
33
>>> x, y = p # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y # fields also accessible by name
33
>>> p # readable __repr__ with a name=value style
Point(x=11, y=22)
Una clase es más o menos un envoltorio elegante para un dict
de atributos a objetos. Cuando crea una instancia de una clase, puede asignar sus atributos, que se almacenarán en foo.__dict__
; Del mismo modo, puede buscar en foo.__dict__
para cualquier atributo que ya haya escrito.
Esto significa que puedes hacer algunas cosas dinámicas ordenadas como:
class Employee: pass
def foo(self): pass
Employee.foo = foo
así como asignar a una instancia particular. (EDITAR: parámetro self
añadido)