【问题标题】:Why is this returning two values? Easy python beginner为什么这会返回两个值?简单的python初学者
【发布时间】:2015-04-09 23:17:29
【问题描述】:

有人能解释一下为什么我在下面的类中的 enter 方法返回两个值吗?我正在学习 python 并正在创建一个简单的游戏来掌握 OOP 和类。无论如何,我需要 enter 方法从 sn-ps 列表中返回一个随机的 sn-p。但我不断得到两个 sn-ps 而不是一个。有人可以解释为什么吗?

    from sys import exit
    from random import randint




  class Island(object):

    def enter(self):
     pass



  class Loser(Island):
    snippets = ["Welcome to loser Island",
            "Can't win them all", 
            "There's always next time"]             
   def enter(self): 
      print Loser.snippets[randint(0,len(self.snippets)-1)]



  loser_test = Loser()
  loser_test.enter()

【问题讨论】:

  • 这是您的完整代码吗?就像在这段代码中一样, Loser.enter 不返回任何内容;它只是打印一些东西。另外,您能否修复缩进以反映类结构?
  • 你用过print loser_test.enter()吗?
  • @Kasra 他们不应该这样做。方法本身有print语句
  • 它不返回任何值 .... 所以我不相信你它返回两个 ...
  • 上面的代码只为我打印了一件事,所以问题一定不在这里。

标签: python function class methods


【解决方案1】:

你为什么不直接使用random.choice

def enter(self): 
    print random.choice(self.snippets)

【讨论】:

  • 这如何回答用户的问题?这是一个很好的风格选择,是的,但除此之外......
  • 因为与其尝试解决XY problem,如果他们是在从列表中选择一个随机项目之后,我建议替代他们的混淆随机列表索引方法
  • 我没有在这个问题的任何地方投票,但请记住,“无缘无故投票”旅是 no better than“无缘无故投票”旅。
【解决方案2】:

通常,您将创建一个类,然后描述该类实例的行为和内容。类的实例是类型为该类的对象。例如,john = Person('John', 'Doe') 将创建一个Person 对象,将'John''Doe' 发送到对象的__init__ 方法(构造函数)。

以下通过使用单词self 来强调类的实例。 self 不是关键字(如in);它只是对象描述用来指代对象本身的词。您可以使用任何单词(如for xyz in [1,2,3] 中的xyz),但首选self

>>> import random
>>> class L(object):
...     def __init__(self):
...             self.snippets = ["Welcome", "Can't", "There's"]
...     def enter(self):
...             print (random.choice(self.snippets))
...
>>> l = L()
>>> l.enter()
There's
>>> l.enter()
There's
>>> l.enter()
Welcome
>>> l.enter()
Can't
>>>

【讨论】:

  • 这确实与 Cyber​​ 的答案没有太大区别......值得一票,但我真的不认为他们中的任何一个都真正解决了 OP 的问题(这使得 OP 没有提供足够的信息来实际解决)
  • 我想我会提供更多关于类的解释,并列出类的常用结构(特别是定义一个分配self 变量的__init__())。希望它有所帮助。
【解决方案3】:

我要猜测一下,因为你有这样的东西

class Island:
    def __init__(self):
        print self.enter()

但它确实是在黑暗中刺伤......因为您没有提供足够的信息来实际回答您的问题。 ...(真的我想这个问题应该被关闭,直到 OP 提供足够的数据)

你可以通过运行来测试这个

loser_test = Loser()

如果您看到几乎肯定是您的问题的打印件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2014-08-17
    • 2015-04-15
    • 2014-10-01
    • 2020-02-02
    • 2022-01-25
    • 2017-02-11
    相关资源
    最近更新 更多