[Tutor] use of dict() function

Alex Kleider alexkleider at gmail.com
Sun Jun 2 22:44:35 EDT 2024


#!/usr/bin/env python3
"""
Question:
I created a class which I initially coded as in Rec0.
I then read[1] that calling dict(mapping) returns a new dict
essentially providing the functionality of my class (except
for the call-ability feature.)
The interesting thing is that calling dict(mapping) within a class
definition seems to result in different behavior than when called
elsewhere.
Is there an explanation???
The following code hopefully illustrates what I'm on about.
Cheers,
Alex Kleider

[1]: https://www.thepythoncodingstack.com/p/python-dict-is-more-versatile-than-you-may-think
"""

class Rec0(dict):
    def __init__(self, rec):
        for key, value in rec.items():
            self[key] = value
    def __call__(self, fstr):
        return fstr.format(**self)

class Rec1(dict):
    def __init__(self, rec):
        self = dict(rec)
    def __call__(self, fstr):
        return fstr.format(**self)

def test():
    d0 = {"husband": "Alex", "wife": "June",
          "daughter": "Tanya", "son": "Kelly", }
    d1 = dict(d0)
    d1["grand_daughter"] = "Isabella"
    print("Using dict function directly...")
    print("  d1 should (and does) contain five entries as follows:")
    print(d1); print()
    d0 = {"husband": "Alex", "wife": "June",
          "daughter": "Tanya", "son": "Kelly", }
    d1 = Rec0(d0)
    d1["grand_daughter"] = "Isabella"
    print("Using Rec0 (which doesn't use the dict() function)...")
    print("  d1 also contain five entries as follows:")
    print(d1); print()
    d0 = {"husband": "Alex", "wife": "June",
          "daughter": "Tanya", "son": "Kelly", }
    d1 = Rec1(d0)
    d1["grand_daughter"] = "Isabella"
    print("Using Rec1 (which uses the dict() function)...")
    print("  d1 should (but doesn't) contain the five entries:")
    print(d1); print()

if __name__ == "__main__":
    test()


More information about the Tutor mailing list