data: Replace usymbol/string equivalence with obj __getattr__ implementation.
authorFredrik Tolf <fredrik@dolda2000.com>
Thu, 13 Jan 2022 22:24:14 +0000 (23:24 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Thu, 13 Jan 2022 22:24:14 +0000 (23:24 +0100)
coe/data.py

index b65dbae..aaa862d 100644 (file)
@@ -1,4 +1,5 @@
 class symbol(object):
+    __slots__ = []
     isafe = set("abcdefghijklmnopqrstuvwxyz" +
                 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
                 "$%^&*_=/.")
@@ -47,18 +48,15 @@ class symbol(object):
         return "%s:%s" % (self.quote(self.ns), self.quote(self.name))
 
 class usymbol(symbol):
+    __slots__ = ["name"]
     ns = ""
+
     def __init__(self, name):
         self.name = name
 
-    def __hash__(self):
-        return hash(self.name)
-    def __eq__(s, o):
-        if isinstance(o, str):
-            return s.name == o
-        return super().__eq__(o)
-
 class nssymbol(symbol):
+    __slots__ = ["ns", "name"]
+
     def __init__(self, ns, name, *args, **kw):
         super().__init__(*args, **kw)
         self.name = name
@@ -77,3 +75,8 @@ class obj(object):
         self.__dict__[key] = val
     def __delitem__(self, key):
         del self.__dict__[key]
+    def __getattr__(self, name):
+        try:
+            return self.__dict__[symbol.get("", name)]
+        except KeyError:
+            raise AttributeError(name) from None