Estoy tratando de escribir dos clases con el mismo nombre en un archivo. Algo como esto:

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

Y usar aquí:

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

¿Es posible?

-1
Saeed 2 oct. 2019 a las 16:08

3 respuestas

No puedes Una declaración de clase es solo una declaración, por lo que la segunda sobrescribirá la primera, al igual que con x=1; x=2. Lo que probablemente quiera es constructores alternativos para su clase. Consulte classmethod.

1
blue_note 2 oct. 2019 a las 13:10

Puedes usar el kwargs como,

$ 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)

Salida:

$ python kwargs.py
A(id=None, name=foo, type=None)
A(id=id1, name=foo, type=footype)
0
han solo 2 oct. 2019 a las 13:15

En resumen, no. Pero:

Si tiene la misma funcionalidad, solo desea tener diferentes constructores, use argumentos predeterminados:

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)

Si tiene una funcionalidad diferente: use nombres diferentes.

0
tituszban 2 oct. 2019 a las 13:12
58202208