How to create inline objects with properties?

后端 未结 9 700
误落风尘
误落风尘 2020-12-04 19:12

In Javascript it would be:

var newObject = { \'propertyName\' : \'propertyValue\' };
newObject.propertyName;  // retur         


        
相关标签:
9条回答
  • 2020-12-04 19:22

    I like Smashery's idea, but Python seems content to let you modify classes on your own:

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

    Works just fine in Python 2.5 for me. Note that you do have to do this to a class derived from object - it won't work if you change the line to obj = object.

    0 讨论(0)
  • 2020-12-04 19:29
    obj = type('obj', (object,), {'propertyName' : 'propertyValue'})
    

    there are two kinds of type function uses.

    0 讨论(0)
  • 2020-12-04 19:38
    class test:
        def __setattr__(self,key,value):
            return value
    
    
    myObj = test()
    myObj.mykey = 'abc' # set your property and value
    
    0 讨论(0)
  • 2020-12-04 19:40

    It is easy in Python to declare a class with an __init__() function that can set up the instance for you, with optional arguments. If you don't specify the arguments you get a blank instance, and if you specify some or all of the arguments you initialize the instance.

    I explained it here (my highest-rated answer to date) so I won't retype the explanation. But, if you have questions, ask and I'll answer.

    If you just want a generic object whose class doesn't really matter, you can do this:

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

    An obvious extension would be to add an __str__() function that prints something useful.

    This trick is nice sometimes when you want a more-convenient dictionary. I find it easier to type x.foo than x["foo"].

    0 讨论(0)
  • 2020-12-04 19:42

    Python 3.3 added the SimpleNamespace class for that exact purpose:

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

    In addition to the appropriate constructor to build the object, SimpleNamespace defines __repr__ and __eq__ (documented in 3.4) to behave as expected.

    0 讨论(0)
  • 2020-12-04 19:43

    Another viable option is to use namedtuple:

    from collections import namedtuple
    
    message = namedtuple('Message', ['propertyName'], verbose=True)
    messages = [
        message('propertyValueOne'),
        message('propertyValueTwo')
    ]
    
    0 讨论(0)
提交回复
热议问题