Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何编写两个同名类_Python - Fatal编程技术网

Python 如何编写两个同名类

Python 如何编写两个同名类,python,Python,我试图在一个文件中编写两个同名的类。大概是这样的: class A: def __init__(self, name): self.name=name class A: def __init__(self, id, name,pass): self.id=id self.name=name self.type=pass 并在此处使用: obj1=A(name) obj2=A(id,name,pass) 可能吗

我试图在一个文件中编写两个同名的类。大概是这样的:

class A:
    def __init__(self, name):
        self.name=name

class A:
    def __init__(self, id, name,pass):
        self.id=id 
        self.name=name
        self.type=pass
并在此处使用:

obj1=A(name)
obj2=A(id,name,pass)

可能吗?

你不能。类声明只是一个声明,所以第二个声明将覆盖第一个声明,就像执行x=1一样;x=2。您可能需要的是类的替代构造函数。请参见。

简言之,没有。但是:

如果您具有相同的功能,只想拥有不同的构造函数,请使用默认参数:

class A:
    def __init__(self, name, id=None, pass=None):
        self.id=id 
        self.name=name
        self.type=pass

# These both work
obj1=A(name)
obj2=A(id,name,pass)
如果您有不同的功能:使用不同的名称。

您可以使用kwargs,如

输出:


以我的经验来说不是。为什么每个类都需要使用相同的类呢?使用kwargs,在_init________________________________________。阅读有关默认参数的内容如果你问一个问题,问你到底想做什么,别人会告诉你一个更好的方法,那么使用默认参数的单次初始化可能就足够了here@DeepSpace:可能吧,但这篇文章让我想起了类java中的构造函数重载
$ cat kwargs.py
class A:
    def __init__(self, *args, **kwargs):
        self.id= kwargs.get('id')
        self.name = kwargs.get('name')
        self.type = kwargs.get('type')

    def __str__(self):
        return '{}(id={}, name={}, type={})'.format(
            self.__class__.__name__,
            self.id,
            self.name,
            self.type,
        )


obj1 = A(name='foo')
obj2 = A(id='id1', name='foo', type='footype')
print(obj1)
print(obj2)
$ python kwargs.py
A(id=None, name=foo, type=None)
A(id=id1, name=foo, type=footype)