Fallklasse in Python

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

Fallklasse in Python
Klassennotation in Python
In Python-Klassenvariablen versteckte Landminen
Lesen Sie PNG-Chunks in Python (Klassenausgabe)
Untersuchen Sie die Klasse eines Objekts mit Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
[Python] -Klasse, Instanz
SendKeys in Python
"Kanrika" die Python-Klasse
Metaanalyse in Python
Unittest in Python
Über Python, Klasse
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Python-Klasse, Instanz
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
# Python-Grundlagen (Klasse)
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Generieren Sie eine erstklassige Sammlung in Python
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Implementieren Sie __eq__ usw. generisch in der Python-Klasse
Trump-Klasse in Python (mit Vergleich)
Verwendung von __slots__ in der Python-Klasse
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python