有没有办法解决来自 __init__ 的“赋值前引用的局部变量 'kwargs'”?
Is there a way to solve 'local variable 'kwargs' referenced before assignment' from __init__?
我有一个 Class 接受 **kwargs
。我希望能够在 class 内的函数中使用它。
我看过其他的解决方案,说必须使用 return self.kwargs
,但我不确定我必须在哪里做(在函数之外,或者在函数内部但在最后)
class Foo():
def __init__(self, name:str, **kwargs):
self.name = name
self.kwargs = kwargs
# print(kwargs/self.kwargs) returns the dictionary as I expected
## There's an __enter__ and __exit__ that does nothing, just returns self
def show():
if kwargs:
print(name, f"{key} and {value}" for key, value in self.kwargs.items()) # Using kwargs.items() didn't work too
else:
print(name)
return self.kwargs
然后我做了:
with Foo('some_name', foo='bar', foo_bar='baz') as f:
f.show()
我得到的错误是:
File "/...", line 73, in <module>
f.show()
File "/...", line 96, in show
if kwargs:
UnboundLocalError: local variable 'kwargs' referenced before assignment
我做错了什么?
谢谢。
有些事情是错误的。首先,该函数没有将 class 实例 self
传递给它。其次,if
语句应该是 if self.kwargs
。这是访问实例的 kwargs
变量。
def show(self):
if self.kwargs:
print(name, f"{key} and {value}" for key, value in self.kwargs.items()) # Using kwargs.items() didn't work too
else:
print(name)
return self.kwargs
看起来有两个错误:
您的方法定义需要包含 self,此后您可以从 'self'.
访问实例变量(您的 kwargs)
def show(self):
if self.kwargs...
当您实例化一个新对象实例时 FooInstance = Foo('John',...)
,您会为该实例创建新变量。 Foo class 的所有需要实例变量的方法都需要传入一个参数,按照惯例称为 self 。然后,您可以在这些方法中使用 self 关键字访问实例变量。
打印语句看起来也不对,您可能需要这个
print(f"{self.name} {key} and {value}" for key, value in self.kwargs.items())
最后,我认为您在这里不需要 with ... as
上下文管理器。像这样比较合适。
myobj = Foo(...)
myobj.show()
我有一个 Class 接受 **kwargs
。我希望能够在 class 内的函数中使用它。
我看过其他的解决方案,说必须使用 return self.kwargs
,但我不确定我必须在哪里做(在函数之外,或者在函数内部但在最后)
class Foo():
def __init__(self, name:str, **kwargs):
self.name = name
self.kwargs = kwargs
# print(kwargs/self.kwargs) returns the dictionary as I expected
## There's an __enter__ and __exit__ that does nothing, just returns self
def show():
if kwargs:
print(name, f"{key} and {value}" for key, value in self.kwargs.items()) # Using kwargs.items() didn't work too
else:
print(name)
return self.kwargs
然后我做了:
with Foo('some_name', foo='bar', foo_bar='baz') as f:
f.show()
我得到的错误是:
File "/...", line 73, in <module>
f.show()
File "/...", line 96, in show
if kwargs:
UnboundLocalError: local variable 'kwargs' referenced before assignment
我做错了什么?
谢谢。
有些事情是错误的。首先,该函数没有将 class 实例 self
传递给它。其次,if
语句应该是 if self.kwargs
。这是访问实例的 kwargs
变量。
def show(self):
if self.kwargs:
print(name, f"{key} and {value}" for key, value in self.kwargs.items()) # Using kwargs.items() didn't work too
else:
print(name)
return self.kwargs
看起来有两个错误:
您的方法定义需要包含 self,此后您可以从 'self'.
访问实例变量(您的 kwargs)def show(self):
if self.kwargs...
当您实例化一个新对象实例时 FooInstance = Foo('John',...)
,您会为该实例创建新变量。 Foo class 的所有需要实例变量的方法都需要传入一个参数,按照惯例称为 self 。然后,您可以在这些方法中使用 self 关键字访问实例变量。
打印语句看起来也不对,您可能需要这个
print(f"{self.name} {key} and {value}" for key, value in self.kwargs.items())
最后,我认为您在这里不需要 with ... as
上下文管理器。像这样比较合适。
myobj = Foo(...)
myobj.show()