2012-09-25 35 views
2

我不是很確定我如何短語的問題主題...Python的 - 導入2班到主文件

有3個文件,制定了:

bank.py:

class Bank(object): 

    def __init__(self, money): 
     self.money = money 

    def currentMoney(self): 
     print "You currently have $%d" %self.money 

    def useMoney(self, money_use): 
     self.money = self.money - money_use 
     print "You used $%d" %money_use 
     self.currentMoney() 

    def getMoney(self, money_get): 
     self.money = self.money + money_get 
     print "You received $%d" %money_get 
     self.currentMoney() 

event.py:

class Event(object): 

    def Event1(self): 
     print "Your dad needs money. Will you give him?" 
     decision = raw_input("Yes or No") 
     if decision == "Yes": 
      Bank.useMoney(500) 
     elif decision == "No": 
      print "Your father is sad" 
     else: 
      print "I do not know what are you talking about" 

main.py:

import bank 
import event 

Bank = bank.Bank(1000) 
Event = event.Event() 

Event.Event1() 

當我執行的代碼。我得到以下錯誤:

NameError: global name 'Bank' is not defined 

基本上,我想要做的就是用event.py創建的一系列事件,這將影響到錢,我可以使用main.py運行不同系列的事件。

你能指導我如何做到這一點?謝謝!

+0

不要在main.py中使用與爲其類或模塊分配對象實例的變量相同的名稱。應該是'bank1 = bank.Bank(1000)','event1 = event.Event()'等。 –

+1

感嘆。 Python不是Java。 1.每個文件可以有更多的一個類; 2.如果不封裝任何數據,則不需要類:事件不需要是類。 –

回答

1

您需要import bankevent.py,並使用

if decision == "Yes": 
    bank.Bank(...) 

,或者你可以在你的event.py的開頭使用:

from bank import Bank 

class Event(object): 
    ... 

否則,Python不能知道Bank對象定義當它加載event模塊時,模塊爲bank

2

正如在其他答覆中提到,您需要在event.py

from bank import Bank 

導入Bank說了這麼多,看着event.py的代碼,你會碰到就行了另一個錯誤:

Bank.useMoney(500) 

由於useMoney()需要self作爲第一個參數,所以它需要一個Bank實例拉澤運行而不是類本身(在Java類型中,useMoney是一種實例方法,而不是靜態方法)。

認爲你的目的是什麼,是有一個Bank實例包含內部Event,然後調用該useMoney每當Event1被調用。

+0

嗨,亞當,你能推薦一種方法來構建班級,以便我可以做我想做的事情嗎?謝謝! – rickchong

+0

嗨,亞當,謝謝!我認爲這是可能的。我之所以將其分拆出來,是爲了以後可以用其他方式使用銀行。例如,我可以有一個shop.py,我可以使用Money來購買Stuff。 – rickchong