El objeto 'xxx' no tiene el atributo 'xxx' y 'xxx' toma 2 argumentos posicionales pero a 3 se les dio un motivo de error

¡Encontré dos errores comunes en una noche y quiero compartirlos!

AttributeError: el objeto 'xxx' no tiene el atributo 'xxx'

Obviamente ya está definido, ¡el código sigue siendo incorrecto! ! !
Razón 1: se ignora el doble subrayado de Int () (se volverá violeta cuando __ use el doble subrayado, lo cual es correcto)
Insertar descripción de la imagen aquí
Razón 2: hay chino en la ruta.

TypeError: xxx toma 2 argumentos posicionales pero se dieron 3

Motivo: problema de paso de parámetros. Nota: self representa la propia instancia de clase creada, por lo que se pueden vincular varias propiedades a self internamente. Al crear una instancia, no puede pasar parámetros vacíos, debe pasar parámetros que coincidan con el método. Pero tenga en cuenta que no es necesario pasar self, el intérprete de Python pasará las variables de instancia por sí mismo.

Demostración de errores:

class ABC:
...
    def channel(self, x):
    	b, c, h, w = x.shape 
        x = x.reshape(b, 2, -1, h, w)
        return x
	
	def forward(self, x):
		...
		out = self.channel(out, 2)#传了2个参数,报错!
		return

Demostración correcta:

class ABC:
...
    def channel(self, x, group):
    	b, c, h, w = x.shape 
        x = x.reshape(b, group, -1, h, w)
        return x
	
	def forward(self, x):
		...
		out = self.channel(out, 2)#传了2个参数,x=out,group=2
		return

o

class ABC:
...
    def channel(self, x, group=2):
    	b, c, h, w = x.shape 
        x = x.reshape(b, group, -1, h, w)
        return x
	
	def forward(self, x):
		...
		out = self.channel(out)#传了1个参数,x=out
		return

Supongo que te gusta

Origin blog.csdn.net/LZL2020LZL/article/details/131689328
Recomendado
Clasificación