提问人:MWallace 提问时间:7/11/2022 最后编辑:Marco BonelliMWallace 更新时间:7/11/2022 访问量:48
为什么在方法参数中无法识别我的类的实例?
Why is an instance of my class not being recognised in the method parameters?
问:
我在 Python 中使用类实例属性作为方法参数的默认值时遇到了问题。让我向你展示吐出错误的代码:
class Table():
# then a bunch of other methods and an __init__
def print_table(self,message = f'Current bet: {human.bet}'):
self.human_cards(human.hold_cards)
self.info_lines(human,cpu,message)
self.cpu_cards(cpu.hold_cards)
for item in self.hum_print:
print(item)
for item in self.info_print:
print(item)
for item in self.cpu_print:
print(item)
我的错误是:
NameError Traceback (most recent call last)
<ipython-input-7-bf1a6f19a3b1> in <module>
----> 1 class Table():
2
3
4 def __init__(self, length, height, card_width = 10, card_spacing = 5):
5 self.length = length
<ipython-input-7-bf1a6f19a3b1> in Table()
44 self.info_print = [line1, line2, line3, line4, line5, line6]
45
---> 46 def print_table(self,message = f'Current bet: {human.bet}'):
47
48 self.human_cards(human.hold_cards)
NameError: name 'human' is not defined
human
是一个类的实例,我在这个类的其他方法中使用该属性非常好。在定义之前没有调用类的实例,有没有办法以这种方式使用属性?Player
human.bet
Table
Table
human
答:
0赞
Martin Kroll
7/11/2022
#1
您的代码将始终引发 NameError,直到名称“human”出现在定义类表的同一范围内(在表类定义之前)。您可以通过导入名称或在同一模块中定义名称来添加名称。
from some_module import human
class Table():
def print_table(self,message = f'Current bet: {human.bet}'):
或
human = Player()
class Table():
def print_table(self,message = f'Current bet: {human.bet}'):
无论如何,这是一个糟糕的依赖关系。
评论
2赞
ShadowRanger
7/11/2022
因为它是一个默认参数,所以也可以在类的顶层定义,只要它是在 .在函数中,您不能进行此类非限定引用,但在默认参数中可以。human
print_table
0赞
MWallace
7/11/2022
谢谢大家,这回答了我的问题。这是我第一个使用类的项目,所以我对一些事情仍然有点毛茸茸的。
评论
human
需要在定义类时定义。显然不是。只需用作占位符并在函数体中检查即可。- “在定义 human 之前,不会调用 Table 类的实例” - 是的,但如果未定义,则该类甚至无法定义,因为您将其用作其方法之一定义的一部分。= None
human
human
=None