Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AttributeError when using object.__setattr__

What's wrong with the last three lines?

class FooClass(object):
    pass 
bar1 = object() 
bar2 = object() 
bar3 = object() 
foo1 = FooClass() 
foo2 = FooClass() 
foo3 = FooClass() 
object.__setattr__(foo1,'attribute','Hi')
foo2.__setattr__('attribute','Hi')
foo3.attribute = 'Hi'
object.__setattr__(bar1,'attribute','Hi')
bar2.attribute = 'Hi'
bar3.attribute = 'Hi'

I need an object having a single attribute (like foo) should I define a class (like FooClass) just for it?

like image 726
jimifiki Avatar asked Oct 27 '25 00:10

jimifiki


1 Answers

object is built-in type, so you can't override attributes and methods of its instances.

Maybe you just want a dictionary or collections.NamedTuples:

>>> d = dict(foo=42)
{'foo': 42}
>>> d["foo"]
42

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'], verbose=True)
>>> 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)
like image 71
defuz Avatar answered Oct 28 '25 12:10

defuz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!