Python:Class:在同一个类中调用一个函数

时间:2014-03-09 12:03:05

标签: python class python-2.7

美好的一天......

我在课堂上的学习过程中有点挣扎。让我展示我的代码,以及正在发生的事情。

from random import randint
print "Start"
class Simulation (object):
    def __init__(self):
        self.bankroll= 5000
        self.bet=0
        self.betLevel= 0
        self.betList=[5,5,5,10,15,25,40,65,100]
        self.wlist=[]
        self.my_file=open("output.txt","w")
        self.winningNumber=0
        self.myNumber=[4,5,7,8]
        self.testCase=1
        self.my_file.write("Test case Bet Number Outcome Bankroll")
    def gamble(self):
        self.bet=self.betList[self.betLevel]
        if self.bankroll < 1000 :
            self.bet= 5
        self.winningNumber= randint(0,36)
        if self.winningNumber in self.myNumber:
            win()
        else:
            lose()
    def win(self):
        self.bankroll +=(17*self.bet)
        self.wlist= [self.testCase,self.bet,self.winningNumber,"WIN",self.bankroll]
        self.betLevel=0
        write()
    def lose(self):
        self.bankroll -=self.bet
        self.wlist= [self.testCase,self.bet,self.winningNumber,"LOSE",self.bankroll]
        self.betLevel +=1
        write()
    def write(self):
        self.my_file.write(" ".join(self.wlist))
    def startSimulation(self):
        for i in range (100):
            gamble()
        closeFile()
    def closeFile(self):
        self.my_file.close()

mySimulation= Simulation()
mySimulation.startSimulation()
print "DONE"

所以在这段代码中,我正在尝试使用奇怪的投注系统来模拟轮盘游戏。它的作用类似于鞅,但我没有加倍,而是遵循斐波那契序列。

所以我的问题是我收到了这个错误:

Traceback (most recent call last):
  File "D:\Roulette simulation\python 3.py", line 44, in <module>
    mySimulation.startSimulation()
  File "D:\Roulette simulation\python 3.py", line 38, in startSimulation
    gamble()
NameError: global name 'gamble' is not defined

我的问题。为什么?我的意思是,我在同一个班级调用一个函数?为什么我收到全局错误?

2 个答案:

答案 0 :(得分:2)

在方法中,您有self作为对实例的引用。您可以通过该引用访问该实例上的方法:

self.gamble()

此处没有全局gamble功能;该方法是Simulation类的一部分。这适用于所有方法;例如,您还必须在closeFile上致电losewinwriteself

答案 1 :(得分:0)

尝试运行

self.gamble()

在类函数中,self表示类本身(有人使用'cls'而不是'self'),所以 self.gamble 表示此类的赌博功能

如果你想在类归属的位置运行一个函数

>>> class P:
    name = 'name'
    def getage(self):
        return 18
    age = property(getage)


>>> p = P()
>>> p.age
18
>>>