2

setattrオブジェクトの外にいるときは、メソッドを使用する必要があることを知っています。setattrただし、ユニコードキーで呼び出すのに問題があり、__setattr__直接使用する必要があります。

class MyObject(object):
    def __init__(self):
        self.__dict__["properties"] = dict()
    def __setattr__(self, k, v):
        self.properties[k] = v
obj = MyObject()

そして、次のコンテンツを取得しますobj.properties

  • setattr(obj, u"é", u"à"): UnicodeEncodeError を発生させます
  • setattr(obj, "é", u"à"):{'\xc3\xa9': u'\xe0'}
  • obj.__setattr__(u"é", u"à"):{u'\xe9': u'\xe0'}

なぜPythonがこれらの違いで動作しているのか理解できません

4

2 に答える 2