class symbol(object):
+ __slots__ = []
isafe = set("abcdefghijklmnopqrstuvwxyz" +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"$%^&*_=/.")
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
self.ns = ns
+class namedtype(type):
+ def __new__(cls, *args, typename=None, **kwargs):
+ self = super().__new__(cls, *args, **kwargs)
+ self.typename = typename
+ return self
+
+ @classmethod
+ def make(cls, *args, typename=None, **kwargs):
+ self = cls(*args, **kwargs)
+ self.typename = typename
+ return self
+
class obj(object):
def __getitem__(self, key):
return self.__dict__[key]
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