2016-11-30 4 views
0

ich um mit Klassen spiele und ich möchte folgendes tun:Berufung Attribute von Klassen in Python

class Hi (object): 
    def __init__(self, bloop): 
      self.bloop = bloop 
thing = Hi("bloop") 
name = input("Input a thing") # Let`s assume you input thing 
print(name.bloop) 

Was ich möchte es print "bloop" ist für sie tun, weil Sie thing eingegeben und es wird bloop aus thing ein bisschen wie thing.bloop.

+0

versucht, Gleichheitszeichen und Zitate zu korrigieren. Wenn etwas fehlt, können Sie es rückgängig machen. – Lafexlos

Antwort

0

Wie wäre es thing in einem dict speichern:

class Hi: 
    def __init__(self, bloop): 
     self.bloop = bloop 
things = {'thing': Hi('bloop')} 

name = input("Input a thing") # Let`s assume you input 'thing' 
try: 
    print(things[name].bloop) 
except KeyError: 
    print("Sorry, I dont know that thing :(") 

Es gibt natürlich auch andere Möglichkeiten, um ein Attribut einer Klasse zu nennen. Sie könnten eine __call__() Methode implementieren, die Sie die Klasseninstanz wie eine Funktion aufrufen können, und in Ihrem Fall Rückkehr .bloop:

class Hi: 
    def __init__(self, bloop): 
     self.bloop = bloop 
    def __call__(self): 
     return self.bloop 

things = {'thing': Hi('bloop')} 
name = input("Input a thing") # Let`s assume you input 'thing' 
try: 
    print(things[name]()) 
except KeyError: 
    print("Sorry, I dont know that thing :(") 

Auf diese Weise können Sie Ihr Attribut später umbenennen oder ein anderes Attribut zurückzukehren (oder tun etwas völlig anderes zusammen), ohne .bloop in Ihrer Hauptpython-Datei ersetzen zu müssen.

Eine dritte Möglichkeit, die calling attributes from[of] classes in Python auf Ihre Frage Titel direkt betrifft: Sie können die @Property Dekorateur verwenden, um Ihre .bloop Attribut aufrufbar wie eine Funktion zu machen etwa so:

class Hi: 
    def __init__(self, bloop): 
     self.bloop = bloop 
    @Property 
    def bloop(): 
     return self.bloop 

    @bloop.setter 
    def bloop(self, new_value) 
     self.bloop = new_value 


things = {'thing': Hi('bloop')} 
name = input("Input a thing") # Let`s assume you input 'thing' 
try: 
    print(things[name].bloop()) 
except KeyError: 
    print("Sorry, I dont know that thing :(") 

die Property Dekorateur vollständig zu verstehen, I recommend this article .

Btw, nach dem tags auf Ihre Frage, die Sie verwenden Python3.x - Sie müssen nicht erklären, dass Ihre Klasse von Object in Python3 erbt und später.