如何编写一个用无参数或一个参数初始化的python类

时间:2017-12-07 20:34:16

标签: python typeerror

我正在从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

非常感谢您的帮助,谢谢!

1 个答案:

答案 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