我正在从Java过渡到Python,目前我很难看到这个看似简单的代码,它的Java等效工作正常。
我正在尝试创建一个名为TestClass的对象,它接受一个名为text或不带参数的参数;在这种情况下,默认字符串“foo”被分配给文本实例变量。
class TestClass(object):
def __init__(self):
self.text = "foo"
def __init__(self, text):
self.text = text
a = TestClass()
b = TestClass("bar")
我真的无法确定问题并收到以下错误:
a = TestClass()
TypeError: init ()缺少1个必需的位置参数:'text
非常感谢您的帮助,谢谢!
答案 0 :(得分:2)
Java没有参数的默认值(我上次至少检查过)
在Python中,你不能用不同的参数覆盖方法(这很可能,但第一个定义变得不可见,所以它不是很有用)。
所以你要做的事情就是这样翻译:
def __init__(self, text="foo"):
self.text = text
对于字符串,整数,浮点数,这没关系,但要小心可变类型:"Least Astonishment" and the Mutable Default Argument
另外,如果你想"模仿"使用不同参数 types 的相同方法名称,您必须定义一个方法(不会更改)并使用动态类型检查来决定要做什么:
def __init__(self, param):
if isinstance(param,str):
# param is a string
elif isinstance(param,int):
# param is an integer