In Scala gibt es eine Fallklasse. Es ist dasjenige, das ein unveränderliches Objekt mit dem Argument erstellt, das Sie eingeben, wenn Sie neu sind, und seinem Namen.
Weil es praktisch ist, wollte ich auch mit Python so etwas wie eine Fallklasse machen, also habe ich es versucht
def caseclass(args):
class _Case(object):
def __init__(self, kwargs):
self._initwargs = kwargs
def _type_check(self, key, value):
if isinstance(value, self._initwargs[key]) is False:
raise TypeError;
def init(self, **kwargs):
[self._type_check(key, kwargs[key]) for key in kwargs]
self._kwargs = kwargs
def getattr(self, name):
return self._kwargs[name]
def setattr(self, name, value):
raise TypeError;
def case(klass):
_case = _Case(args)
krass = type(klass.__name__, klass.__bases__,
{
"__getattr__":_case.getattr,
"__setattr__":_case.setattr,
"__init__":_case.init
})
return krass
return case
Also, wie man die Fallklasse als Dekorateur benutzt
#{Streit:Streitの型}という形式の辞書インスタンスをStreitにします
@caseclass({'foo':str, 'bar':int})
class Hoge(object):pass
hoge = Hoge(foo = "hello", bar = 1)
print(hoge.foo) # "hello"Und Ausgabe
print(hoge.bar) #1 und Ausgabe
hoge.num = 1 #TypeError springt beim Versuch zu setzen
fuga = Hoge(dosukoi = "nokotta") #Und selbst wenn Sie ein undefiniertes Argument angeben, wird der Fehler ausgelöst
Vielleicht gibt es einen besseren Weg
Recommended Posts