Python 使用太少的参数初始化类不会引发错误

Python 使用太少的参数初始化类不会引发错误,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,

我正在处理一些.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, 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”