在 Python 的类中生成一个数字给我一个奇怪的错误 [重复]

Posted

技术标签:

【中文标题】在 Python 的类中生成一个数字给我一个奇怪的错误 [重复]【英文标题】:Generating a number in a class in Python gets me a weird error [duplicate] 【发布时间】:2021-02-21 22:32:53 【问题描述】:

所以我是 Python 的新手,但对一般类来说并不陌生。 我想在我创建的对象中生成一个新数字,并不断更改它。

原来如此

    class ArmedBandit1:
        num = 0
        def spin():
            num = random(10)
    
    a1 = ArmedBandit1()
    
    a1.spin()
    print(a1.num)

现在我得到一个错误

Traceback (most recent call last):
  File "main.py", line 9, in <module>
    a1.spin()
TypeError: spin() takes 0 positional arguments but 1 was given

但我没有给它任何参数,如果我尝试删除“()”它会忽略该方法。

【问题讨论】:

试试def spin(self): 为什么要为此使用类属性?它应该是self.num,因此您可以拥有多个具有不同旋转的实例。 【参考方案1】:

固定代码!

import random
class ArmedBandit1:
    def spin(self):
        return random.randrange(10)

a1 = ArmedBandit1()

print(a1.spin())

谢谢楼上的帮助!!

【讨论】:

【参考方案2】:

self 作为第一个参数来定义!定义 init 并分配属性! (要获取范围内的随机数,请使用random.randrange(10)

import random
class ArmedBandit1:
  def __init__(self):
    self.num = 0
  def spin(self):
    self.num = random.randrange(10)
  
    
a1 = ArmedBandit1()
a1.spin()
print(a1.num)

basics of python classes

【讨论】:

【参考方案3】:

为了让对象为其分配一个变量,您必须创建一个 init() 函数。您还必须使用 self 关键字来引用您正在创建的对象。这是您的代码示例:

import random

class ArmedBandit1:
    def __init__(self):
        self.num = 0

    def spin(self):
        self.num = random.randrange(10)

a1 = ArmedBandit1()

a1.spin()
print(a1.num)

【讨论】:

【参考方案4】:

正如 @Mike67 在 cmets 中建议的那样,您需要包含参数 self 以使该方法适用于该类的特定实例。

【讨论】:

以上是关于在 Python 的类中生成一个数字给我一个奇怪的错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中生成一个数字序列

在 Oracle PL/SQL 中生成字母数字序列

在 Python 3 中生成具有随机长度的类随机唯一字符串的最快方法

如何在 Python 中生成唯一 ID? [复制]

在 Python 中生成非重复随机数

在python中生成具有三个类的3个圆形数据集