2017-06-12 2 views
0

Ich versuche, Validierung für ein Klassenattribut zu haben, so dass es nur bestimmte Werte oder spezifische type Werte annehmen kann. Ich habe mit dem folgenden Ansatz kommtWie rekursiv Datentypen von zwei Objekten in Python vergleichen?

class someClass: 

    value_types = [float, [int], "A", "B"] 

    def __init__(self, value): 
     for value_type in self.value_types: 
      if not self.match_type(value_type, value): 
       raise ValueError("The value type is invalid") 
     self.value = value 

    @staticmethod 
    def match_type(obj1, obj2): 
     """ 
     For obj1 and obj2 recursively compares all the types of containers and 
     elements inside containers, return False in case of mismatch. 
     """ 
     pass 

Ich versuche, einen Weg zu finden, der eine generische match_type Funktion implementiert, das für jede Art von value_type Klasse Attribute funktionieren würde. Meine Hauptmotivation dahinter ist, die Domäne des Instanzattributs value einzuschränken und die Werte zu validieren, die basierend auf dem Klassenattribut value_type übergeben wurden.

Gerade für mehr Klarheit, die in dem obigen someClass Konstruktor erlaubten Werte

  • 7,5
  • [1, 9, 8, 6]
  • "A"
  • "B" wären,

Werte, für die Fehler ausgelöst werden sollten, sind

  • [1.2, 2.3]
  • "C"
  • []
+0

Es spielt keine Rolle für den Zweck Ihrer Frage, aber Sie haben eine Reihe von Fehlern in Ihrer '__init__' Funktion. –

+0

Danke, dass du mich informiert hast, die Bugs behoben. – Satwik

Antwort

0

Sie die Art, indem Sie

x = 5 
type(x) is int 
# True 

jedoch überprüfen, da Sie eine seltsame Mischung von Typen haben und Zeichenketten, benötigen Sie wahrscheinlich eine kompliziertere Überprüfung

x = [6, 3] 
type(x) is list and type(x[0]) is int 
# True 

x = 'A' 
x == 'A' or x == 'B' 
# True 

Was versuchst du zu erreichen? das ist inhärent chaotisch

+0

Ich versuche, die Domäne eines Klassenattributs einzuschränken. – Satwik

+0

Ich denke, es ist schwierig für mich, ohne Kontext zu beurteilen, aber trotzdem sollten die 3 Aussagen, die ich oben zur Verfügung stelle, für Ihre Zwecke ausreichen –

+0

Eigentlich brauche ich etwas Generisches, das für alle verschiedenen Arten von 'value_types' funktionieren kann – Satwik

Verwandte Themen