diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-05-22 00:32:00 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-05-22 00:32:00 +0300 |
commit | 806ea1f6ca2b1b50bb4634be6c39ad83d8af7e89 (patch) | |
tree | 6ff486c9fc6e76cf2e6b984d01a1f28b55432149 /tests/basics/object_new.py | |
parent | 0c937fa25a1a78274ba974a5c1546c0a01106c30 (diff) |
py: Initial attempts to actually allow implementing __new__ in Python.
Caveat is that __new__ should recurse to base class __new__, and ultimately,
object.__new__ is what handles instance allocation.
Diffstat (limited to 'tests/basics/object_new.py')
-rw-r--r-- | tests/basics/object_new.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/basics/object_new.py b/tests/basics/object_new.py new file mode 100644 index 000000000..6131ed337 --- /dev/null +++ b/tests/basics/object_new.py @@ -0,0 +1,20 @@ +# object.__new__(cls) is the only way in Python to allocate empty +# (non-initialized) instance of class. +# See e.g. http://infohost.nmt.edu/tcc/help/pubs/python/web/new-new-method.html +# TODO: Find reference in CPython docs + +class Foo: + + def __init__(self): + print("in __init__") + self.attr = "something" + + +o = object.__new__(Foo) +#print(o) +print(hasattr(o, "attr")) +print(isinstance(o, Foo)) +o.__init__() +#print(dir(o)) +print(hasattr(o, "attr")) +print(o.attr) |