X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=coe%2Fdata.py;h=aaa862dcf9ed6a84f679b43a00607fe4b15c4fa8;hb=6d98d3d8cebcff5dd8a3ee274d4392d862f20172;hp=05e129b12e309f137d2476f217f10291e82a77a8;hpb=e8a122ff3c8bfdb4c4462372e564f16231308be4;p=coe.git diff --git a/coe/data.py b/coe/data.py index 05e129b..aaa862d 100644 --- a/coe/data.py +++ b/coe/data.py @@ -1,4 +1,5 @@ class symbol(object): + __slots__ = [] isafe = set("abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "$%^&*_=/.") @@ -47,23 +48,26 @@ 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 self.ns = ns +class namedtype(type): + def __new__(cls, *args, typename=None, **kwargs): + self = super().__new__(cls, *args, **kwargs) + self.typename = typename + return self + class obj(object): def __getitem__(self, key): return self.__dict__[key] @@ -71,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