programacion privados otra orientada objetos metodo llamar instancia importar funciones clases clase atributos python instantiation dynamic-languages

privados - llamar metodo de otra clase python



¿Cómo crear objetos en línea con propiedades en Python? (8)

Es fácil en Python declarar una clase con una función __init__() que puede configurar la instancia por usted, con argumentos opcionales. Si no especifica los argumentos, obtiene una instancia en blanco y si especifica algunos o todos los argumentos, inicializa la instancia.

Lo expliqué here (mi respuesta mejor calificada hasta la fecha), así que no volveré a escribir la explicación. Pero, si tiene alguna pregunta, pregunte y responderé.

Si solo quieres un objeto genérico cuya clase realmente no importe, puedes hacer esto:

class Generic(object): pass x = Generic() x.foo = 1 x.bar = 2 x.baz = 3

Una extensión obvia sería agregar una función __str__() que imprime algo útil.

Este truco es agradable a veces cuando quieres un diccionario más conveniente. Me resulta más fácil escribir x.foo que x["foo"] .

En Javascript sería:

var newObject = { ''propertyName'' : ''propertyValue'' };

¿Cómo hacerlo en Python?


La respuesta de Peter

obj = lambda: None obj.propertyName = ''propertyValue''


Me gusta Smashery''s idea Smashery''s , pero Python parece contento de poder modificar las clases por su cuenta:

>>> class Inline(object): ... pass ... >>> obj = Inline() >>> obj.test = 1 >>> obj.test 1 >>>

Funciona bien en Python 2.5 para mí. Tenga en cuenta que tiene que hacer esto a una clase derivada de un object ; no funcionará si cambia la línea a obj = object .


No sé si hay una forma integrada de hacerlo, pero siempre puedes definir una clase como esta:

class InlineClass(object): def __init__(self, dict): self.__dict__ = dict obj = InlineClass({''propertyName'' : ''propertyValue''})


Otra opción viable es usar namedtuple :

from collections import namedtuple message = namedtuple(''Message'', [''propertyName''], verbose=True) messages = [ message(''propertyValueOne''), message(''propertyValueTwo'') ]


Python 3.3 agregó la clase SimpleNamespace para ese propósito exacto:

>>> from types import SimpleNamespace >>> obj = SimpleNamespace(propertyName=''propertyValue'') >>> obj namespace(propertyName=''propertyValue'') >>> obj.propertyName ''propertyValue''

Además del constructor apropiado para construir el objeto, SimpleNamespace define __repr__ y __eq__ ( documentados en 3.4 ) para comportarse como se espera.


class test: def __setattr__(self,key,value): return value myObj = test() myObj.mykey = ''abc'' # set your property and value