Commit ca7c5b86 authored by Marius Wachtler's avatar Marius Wachtler

fix attrwrapper of an object which becomes dict backed and support non str types

if we get the attrwrapper of an object, then change it to be dict-backed,
the original attrwrapper should remain valid but no longer connected to that object.
parent 1904ef84
This diff is collapsed.
...@@ -51,6 +51,19 @@ print hasattr(c, "attr") ...@@ -51,6 +51,19 @@ print hasattr(c, "attr")
print hasattr(c, "foo") print hasattr(c, "foo")
print c.__dict__ is d1 print c.__dict__ is d1
c = C()
a = c.__dict__
c.__dict__ = c.__dict__
c.__dict__[u"uni"] = "u"
c.__dict__[u"\u20ac"] = "u"
c.__dict__[(1, 2, 3)] = "t"
print sorted(c.__dict__.keys()), sorted(a.keys())
print "all non str attributes:", sorted([item for item in dir(c) if not isinstance(item, str)])
print "can we retrieve unicode attributes by there ascii value?", c.uni, c.__dict__["uni"]
print "attrwrapper:", a["uni"], a[(1, 2, 3)]
setattr(c, "uni", 1)
print "test setattr()", c.uni, c.__dict__["uni"], a["uni"], len(c.__dict__), len(a)
dictproxy = C.__dict__ dictproxy = C.__dict__
print type(dictproxy) print type(dictproxy)
print "foo" in dictproxy print "foo" in dictproxy
......
# expected: fail
# - haven't bothered to implement this yet
# Funny case: if we get the attrwrapper of an object, then change it to be dict-backed, # Funny case: if we get the attrwrapper of an object, then change it to be dict-backed,
# the original attrwrapper should remain valid but no longer connected to that object. # the original attrwrapper should remain valid but no longer connected to that object.
...@@ -13,3 +10,10 @@ c1.a = 1 ...@@ -13,3 +10,10 @@ c1.a = 1
print aw.items() print aw.items()
c1.__dict__ = d = {} c1.__dict__ = d = {}
print aw.items() print aw.items()
c2 = C()
olddict = c2.__dict__
c2.__dict__ = { "should not be there" : 1 }
print olddict.has_key("should not be there")
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment