Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object class override or modify

Tags:

python

Is it possible to add a method to an object class, and use it on all objects?

like image 936
Igor Golodnitsky Avatar asked Dec 13 '22 04:12

Igor Golodnitsky


2 Answers

In Python attributes are implemented using a dictionary :

>>> t = test()
>>> t.__dict__["foo"] = "bla"
>>> t.foo
'bla'

But for "object", it uses a 'dictproxy' as an interface to prevent such assignement :

>>> object.__dict__["test"] = "test"
TypeError: 'dictproxy' object does not support item assignment

So no, you can't.

NB : you can't modify the metaclass Type directly neither. But as Python is very flexible, I am sure a Guru could find a way to achieve what you want. Any black wizard around here :-) ?

like image 184
e-satis Avatar answered Dec 15 '22 19:12

e-satis


No, Python's internals take great care to make built-in types NOT mutable -- very different design choices from Ruby's. It's not possible to make object "monkeypatchable" without deeply messing with the C-coded internals and recompiling the Python runtime to make a very different version (this is for the classic CPython, but I believe exactly the same principle holds for other good implementations such as Jython and IronPython, just s/C/Java/ and S/C/C#/ respectively;-).

like image 21
Alex Martelli Avatar answered Dec 15 '22 18:12

Alex Martelli