关于class和init的疑惑

class rectangle:
def init(self,a,b):
self.a=a
self.b=b
def getperi(self):
return(self.a+self.b)^2
def getarea(self):
return self.a^self.b

rect=rectangle(3,4)
print(rect.getperi())
14
问题一:init是干什么用的,为什么他函数里面的变量可以被调出来用到后面的定义中去?
问题二:self作用是什么?为什么括号里要加?连设置变量也要加?当我将self.a改成a时,后面一切正常运行,但到最后一步print报错,说a没被定义?

1.init方法是初始化类属性的
2. 在python的类中self代表实例本身,具体来说,是该实例的内存地址。
在调用实例的方法时,Python解释器会自己把实例!!变量!!传给类的函数中的self。

小白一个,希望大佬用尽量简单的话解释谢谢🙏