X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=coe%2Fdata.py;h=f9fccb9720ff79d1ceeb682b0a4ff4fd9b10567a;hb=cef5442b93483149e132b6e1b1fdd787c333d387;hp=b65dbae17ccee8b91d87ecf511dc1e693868d123;hpb=8dc0c47abac97c689406a014945e5f605dd762e1;p=coe.git diff --git a/coe/data.py b/coe/data.py index b65dbae..f9fccb9 100644 --- a/coe/data.py +++ b/coe/data.py @@ -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 @@ -70,6 +68,12 @@ class namedtype(type): 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] @@ -77,3 +81,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