diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/basics/class_new.py | 21 | ||||
-rw-r--r-- | tests/basics/object_new.py | 20 |
2 files changed, 41 insertions, 0 deletions
diff --git a/tests/basics/class_new.py b/tests/basics/class_new.py new file mode 100644 index 0000000000..7fedcab6c2 --- /dev/null +++ b/tests/basics/class_new.py @@ -0,0 +1,21 @@ +class A: + + @staticmethod + def __new__(cls): + print("A.__new__") + return super(cls, A).__new__(cls) + + def __init__(self): + pass + + def meth(self): + pass + +#print(A.__new__) +#print(A.__init__) + +a = A() + +#print(a.meth) +#print(a.__init__) +#print(a.__new__) diff --git a/tests/basics/object_new.py b/tests/basics/object_new.py new file mode 100644 index 0000000000..6131ed337e --- /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) |