2010-12-11 8 views
0

„“ "eine bessere Version meiner IF (Interactive Fiction) zu machen Modul, so können Sie nur ein Modul erstellen, das es importiert und Sie beginnen Hinzufügen Mist Drei Dinge- Gut vier, wenn man die DEBUG variablen die Variablen PLAYER_NAME, PLAYER_LOCATION und PLAYER_INVENTORY. In der Basis sind sie „Luke“, None und Liste das Abenteuer Content-Modul verwendet „aus mask_IF import *“ zählen, Ändern einer dieser Variablen macht es im aktuellen Namespace-es ändert nicht die importierten. Und wegen *, kann ich nicht mask_IF.VARIABLE = Wert entweder.Python - Wie Variable in einem Modul als „aus dem Modul Import *“ importiert verändern

Ich möchte meine "aus mask_IF import * ", aber bei th Gleichzeitig habe ich diese Variablen, die mit jedem separaten Adventure-Modul definiert werden sollen und im Hauptmodul verwendet werden. ""“

==== Im Hauptmodul:

PLAYER_NAME = "Luke" 
... 
class ActionHelp(Action): 
    def ActionHandle(self, Object1, Object2): 
     print "No help for you, " + PLAYER_NAME + "!" 

Im Abenteuer-Modul:

from mask_IF import * 
Text("Your name is normally " + PLAYER_NAME) 
... 
PLAYER_NAME = "Adventure_Tester #001" 
Text("But today you are " + PLAYER_NAME) 

==== Ihr Name ist in der Regel Luke Aber heute kann man sind Adventure_Tester # 001

help Keine Hilfe für Du, Luke! Der Befehl ist Hilfe Die Object1 NICHT Die Object2 angegeben wird, nicht

GEGEBEN

Antwort

3

Sie können dies nicht tun, aus dem Grund, die Sie gegeben haben. Sie kann simuliert werden, indem Sie ein Objekt mit den entsprechenden Attributen erstellen, aber dann können Sie auch nicht * importieren.

0

Ja, man kann es nicht tun. der „von mask_IF import *“ ist eine neue Variable mit dem Namen PLAYER_NAME in Ihrem aktuellen Modul zu schaffen, die auf die gleichen Basisdaten Punkt passiert, zu beginnen. Es ist nicht ein Alias ​​für die Variable in der mask_IF Modul. Wenn Sie versuchen, etwas anderes zu PLAYER_NAME zuweisen, sind Sie die lokale Variable zu sagen, um etwas Neues zu zeigen, die überhaupt keine Wirkung auf das, was die mask_IF Variable auf.

0

Wenn Sie ein Objekt wie StrObj anstelle von Strings verwenden würden, dann würden Sie sich mit einem veränderbaren Typreferenz beschäftigen, der von überall einen Wert haben könnte. Der einzige Unterschied in Ihrem Code wäre, ihn mit einem Aufruf an Set() statt = '...' zu setzen.

class StrObj(object): 
    def __init__(self, value=''): 
     self.value = value 
    def __add__(self, other): 
     return other + self.value 
    def Set(self, value): 
     self.value = value 

Unter der Annahme, dass in mask_IF.py, PLAYER_NAME = StrObj('Some Name') ...

from mask_IF import * 
Text("Your name is normally " + PLAYER_NAME) 
... 
PLAYER_NAME.Set("Adventure_Tester #001") 
Text("But today you are " + PLAYER_NAME) 

, dass alle gesagt ...

Ich glaube, Sie besser dran, die ein Player Objekt mit Eigenschaften sein würden, NAME, etc ... und mit nur dass statt. Ich empfehle, import * spärlich zu verwenden.

Verwandte Themen