2017-03-31 7 views
0

Ich möchte in der Lage sein, "Hallo Harry" von einem Modul zu drucken. Das ist mein Modul (genannt test23):Kann ich auf eine Klasse ohne __init__ zugreifen? - Python

class tool: 

    def handle(self,name): 
     self.name = "hello " + name 

Das ist mein Skript:

import test23 

harry= test23.tool().handle(" harry") 
print harry.name 

ich nicht drucken "Hallo Harry" in meinem Skript müßig erscheinen kann. Wie würde ich das machen?

+0

Hat diesen Code prod Was ist eine Art von Fehler oder Ausnahme? Kannst du das in deine Frage aufnehmen? –

Antwort

1

tool.handle() nicht ein Objekt zurückgeben, so dass Sie das Objekt speichern müssen, bevor Sie die Methode aufrufen:

import test23 

harry = test23.tool() 
harry.handle("harry") 
print harry.name 
+0

Perfekt! Vielen Dank! – semiflex

3

handle gibt nichts zurück, so harry wird NoneType sein. Tun Sie es in zweimal: zuerst die Instanz zuweisen, dann rufen Sie die Methode:

>>> class tool: 
... def hello(self,name): 
...  self.name="hello "+name 
... 
>>> a=tool() 
>>> a.hello('i') 
>>> a.name 
'hello i' 
>>> b=tool().hello('b') 
>>> b.name 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'NoneType' object has no attribute 'name' 
>>> type(b) 
<type 'NoneType'> 
3

Ich denke, das wird es tun.

from test23 import tool 

harry = tool() 
harry.handle("harry") 
print harry.name 
1

Was Sie tun wollte, ist:

harry = test23.tool() # Ok harry is a tool object 
harry.handle(" harry") # Ok harry.name has been set to " harry" 
print harry.name  # Ok print successfully "hello harry" 

Aber Was Sie getan haben, ist: harry= test23.tool().handle(" harry")

Lassen Sie uns einen Durchgang nach dem anderen aussehen:

  • test23.tool(): baut eine neue (temporäre) tool Objekt
  • test23.tool().handle(" harry"): setzt das Attribut name der temporären und kehrt ... None!
  • harry= test23.tool().handle(" harry"): die Attributnamen eines temporären tool Objekt setzt, setzte harry auf den Rückgabewert der handle Methode, die None => gleichen wie harry = None

Alternativ ist, sollten Sie handle ändern, um das tool Objekt zurück :

Klasse Werkzeug:

def handle(self,name): 
    self.name = "hello " + name 
    return self 
Verwandte Themen