在 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 的类中生成一个数字给我一个奇怪的错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章