2017-04-06 3 views
-2

Wie kann ich den Code ändern, so dass ich auch checkbox Funktion zu überprüfen, page.fName, page.lName oder page.email wahr oder falsch aktuell.Wie geerbt Dunder __bool__ zu Multi-Klasse

class Text(object): 

    def check(self): 
     if 'path' in self.locator: 
      return False 
     elif 'email' in self.locator: 
      return True 

    __bool__ = check 


class namebox(Text): 

    def __init__(self): 
     self.locator = 'locator path' 

    def is_enaled(self): 
     return self.check() 


class emailbox(Text): 
    def __init__(self): 
     self.locator = 'email' 


class page_module(): 
    fName = namebox() 
    lName = namebox() 
    email = emailbox() 

    def checkbox(self, instance): 
     return bool(instance) 

    print(fName.is_enaled()) 
    print('fName is using is_enabled function=>{}'.format(fName.is_enaled())) 
    print('fName is using check function=>{}'.format(fName.check())) 
    print('fName is using boolean function=>{}'.format(bool(fName))) 
    print('email is using check function=>{}'.format(email.check())) 
    print('email is using boolean function=>{}'.format(bool(email))) 

if __name__ == "__main__": 
    page = page_module() 
    print('check instance bool =>{}'.format(page.checkbox(page.fName))) #expect false, return false 
    page.fName = 'first name' 
    print('fName is =>{}'.format(page.fName)) 
    print('check instance bool =>{}'.format(page.checkbox(page.fName))) #expect false, return true 
+0

Können Sie Ihr Problem mit einem [MCVE] erklären? – MSeifert

+0

ändern Sie die Frage, meine Frage ist, wenn es möglich ist, kann ich nur überprüfen, ob FName, lName oder E-Mails Locator enthält Pfad oder E-Mail eins ich Zuordnung Zeichenfolge – jacobcan118

Antwort

0

Wenn Sie das tun page.fName = 'first name' in Ihrem if __name__ == "__main__" Block, sind Shadowing Sie die Klassenvariable fName mit einer Instanzvariablen, die an einer Schnur gebunden ist. Da die Zeichenfolge nicht leer ist, ist bool(page.fName)True.

Ich bin nicht genau sicher, dass ich verstehe, was Sie hier versuchen. Vielleicht möchten Sie fName und die anderen Klassenvariablen descriptors, so dass sie Zuordnungen und Wert Lookups auf Instanzen von page_module abfangen können?

+0

ja, ich versuche, Deskriptoren auf Text Klasse – jacobcan118

+0

Die 'Text' Klasse zu verwenden Du hast gezeigt, dass * kein * Deskriptor ist. Das erfordert mindestens eines von "__get__", "__set__" oder "__delete__" (und normalerweise beide der ersten zwei oder alle drei). Wenn Sie diese Methoden erstellt haben, sie aber nicht in Frage stellen, können wir nicht sagen, was Sie tun, und Sie müssen ein [mcve] erstellen. Wenn Sie nach Hilfe fragen, um sie zu implementieren, müssen Sie genauer wissen, welches Verhalten Sie erwarten (es wird schwierig sein, ein anderes boolesches Ergebnis von einem Deskriptor zu erhalten, als Sie von seinem Wert erhalten). – Blckknght

+0

danke, ich bekomme die Beschreibungen funktionieren. Aber meine Frage wird zu was, wenn ich mehr als 3 Funktionen habe, die ich benutzen möchte? trotzdem __get__ oder verschiedene Operationen? – jacobcan118