Python 使用太少的参数初始化类不会引发错误
我正在处理一些.py文件,其中有一个类的开头如下: file1.pyPython 使用太少的参数初始化类不会引发错误,python,python-3.x,class,oop,Python,Python 3.x,Class,Oop,我正在处理一些.py文件,其中有一个类的开头如下: file1.py class SomeClass(object): def __init__(self, arg1="A", arg2="B", arg3="C"): from file1 import SomeClass someinstance = SomeClass("Z") 然后在另一个类中,它被初始化如下: file2.py class SomeClass(object): def __init__(self,
class SomeClass(object):
def __init__(self, arg1="A", arg2="B", arg3="C"):
from file1 import SomeClass
someinstance = SomeClass("Z")
然后在另一个类中,它被初始化如下:
file2.py
class SomeClass(object):
def __init__(self, arg1="A", arg2="B", arg3="C"):
from file1 import SomeClass
someinstance = SomeClass("Z")
我想我遗漏了一些东西,但看不到什么,运行这个程序并只是查看正在发生的事情并不是那么容易
因此,
SomeClass
的init方法包含三个带有默认值的关键字参数,但在实例化类时只给出一个没有关键字的参数。这是arg1的默认值吗?它将被如下实例化的类覆盖?您可以检查它是否覆盖了第一个参数
class SomeClass(object):
def __init__(self, arg1="A", arg2="B", arg3="C"):
self.arg1=arg1
self.arg2=arg2
self.arg3=arg3
pass
someinstance = SomeClass("Z")#over rides the positional argument
someinstance.arg1
因此应该执行
someinstance=SomeClass(arg3=“Z”)
操作,因为类中没有位置参数,所以它会给您带来错误。因此,有两种可能的解决方案
首先,像这样传递默认参数
someinstance = SomeClass(arg1 = "Z")
或
或
第二,解决方案是在类中创建一个位置参数
class SomeClass(object):
def __init__(self, arg, arg1="A", arg2="B", arg3="C"):
现在,你们可以像在声明中一样通过
someinstance = SomeClass("Z")
现在,它不会给您任何错误。那么它不应该这样实例化吗someinstance=SomeClass(arg3=“Z”)
SomeClass(“Z”)
表示arg1=“Z”、arg2=“B”、arg3=“C”
。你是否应该这样做取决于你想做什么。“init方法包含三个关键字参数”-错了,它包含三个参数。他们的参数可以通过位置或关键字提供。谢谢@deceze,我只需要确认一下这会做什么。我没有写这段代码,如果是我的话,我会把那一个关键字放在那里让它更清楚。谢谢@mad_u的帮助,如果不是这么晚的话,我本可以检查自己的。。而someinstance.arg2仍然是“B”,someinstance.arg3仍然是“C”