Il existe une classe de cas dans Scala. C'est celui qui crée un objet immuable avec l'argument que vous mettez lors de la création et son nom.
Parce que c'est pratique, je voulais faire quelque chose comme une classe de cas même avec python, alors je l'ai essayé
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
Alors, comment utiliser la classe de cas en tant que décorateur
#{argument:argumentの型}という形式の辞書インスタンスをargumentにします
@caseclass({'foo':str, 'bar':int})
class Hoge(object):pass
hoge = Hoge(foo = "hello", bar = 1)
print(hoge.foo) # "hello"Et sortie
print(hoge.bar) #1 et sortie
hoge.num = 1 #TypeError saute lors de la tentative de définition
fuga = Hoge(dosukoi = "nokotta") #Et même si vous spécifiez un argument non défini, Error volera
Peut-être qu'il y a une meilleure façon
Recommended Posts