为什么不参与“自我”论证?

时间:2015-06-07 04:54:53

标签: python function methods self

我对使用Python进行编程非常陌生,我只是想问为什么当我调用一个函数时它不起作用。我看到TypeError关于die_roll需要两个参数,但为什么在添加到括号中时self.result覆盖了什么?

import random

def die_roll(self, result):
    self.result = random.randint(1, 10)
    print "Roll the dice, Dennis. "
    print "You have rolled a %s!" % self.result

print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("                  Welcome...                    ")
print ("   TO THE WORST GAME IN THE WORLD!!!!!!!!!!!    ")
print ("   REALLY, IT IS QUITE BAD. YOU'LL SEE......    ")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n")

name = raw_input('Welcome to this awful adventure. Please enter your name to get started: \n')

print "\n%s? I don't like that name. \n" % (name)

name1 = raw_input('Try again: \n')

print "\n%s?! Really? That's the best you can do? You know what - just forget it. You will be called Dennis. \n" % (name1)

print "I happen to like Dennis. It's a good name. Regal. It's nice to meet you.... Dennis. \n"

print "You begin your adventure peering into a long, gloomy cave. You move by rolling a 10-sided dice.\n"

print "You will encounter random enemies along the way. If your combined rolls equal 100, you win!\n"

die_roll()

2 个答案:

答案 0 :(得分:2)

您将功能定义为

def die_roll(self, result):

这告诉python解释器die_roll,需要两个参数self和result。

我猜你从其他类中复制了这个方法,因为self是类中方法的第一个参数的正常命名约定,在后一种情况下,self(第一个参数)指的是'这' (来自c ++或java)。

从功能体看来,您似乎不需要任何参数,也许您可​​以尝试 -

def die_roll():
    result = random.randint(1, 10)
    print "Roll the dice, Dennis. "
    print "You have rolled a %s!" % result

答案 1 :(得分:0)

嗯。我不确定你的主要误解在哪里,但你的问题中有几个。

您没有关注程序的流程以及错误的来源:

def die_roll(self, result):
    /stuff here/

/stuff/

print "You will encounter random enemies along the way. If your combined rolls equal 100, you win!\n"

die_roll()  <---  here is where the TypeError about die_roll needing two arguments is triggered

为什么在添加到括号中时不会被self.result覆盖?,你问?因为错误表示当您拨打die_roll()时,括号不符合您在设置def die_roll(...)时设置的模式。您无法通过在定义函数的位置执行某些操作来避免该错误。他们总是需要在两个地方匹配 - 所有地方。如果def die_roll说它需要两个参数,那么当你调用它时,你需要给它两个参数。

另一个误解是您正在使用def die_roll(self, result)然后使用self.result - 就好像逗号和点运算符以某种方式相关,或者您需要使用这些参数作为获取或返回的方式结果。 (他们不是,你没有)。

另一个原因是你正在使用单词selfresult,就像Python理解它们一样。它们不是关键字,它们在Python中没有特殊含义。

self在Python中没有特殊含义,然而,它是人们为一个特定变量提供的标准名称......不幸的是与面向对象相关,其他可以是一个非常滑的概念从头开始拾取。

你的标题问题为什么函数不需要self参数?可以通过多种方式回答,现在基本上对你没有任何帮助。 blah blah类定义对象,它们包含看起来与函数完全相同但称为方法的东西。方法需要一种方法来引用它们所处的对象,因此方法的第一个参数始终是它所在的对象,并且Python引擎提供第一个参数,因此方法调用看起来总是看起来不匹配,因为该定义比调用还有一个参数。 self是Python程序员用来命名接收对象引用的变量的约定,尽管它本身并不是一个特殊的名称。但那是所有不相关的背景,设置......

函数不需要self,因为它们不是'in'对象,因此它们不需要引用它们所在的对象,因为它们不在一个对象中。 / p>

是的,这不是很有帮助,对不起。我能说的最有用的是,编写更多代码,更多地使用交互式解释器,探索更多,事情会变得更加清晰。