这个报错是因为在你的代码中存在无限递归调用。在 Class_1 的构造函数中,你调用了 self.func_1(),然后在 func_1 方法中又调用了 Class_1().func_3(),这个调用应该是 self.func_3(),因为你想要调用同一个类的方法,而不是创建一个新的类对象。此外,func_3 方法需要接受 self 参数。

类方法和实例方法是面向对象编程中常用的两种方法类型,它们之间的主要区别在于调用方式和作用对象:

  1. 实例方法(Instance Method)
  • 实例方法是在类中定义的函数,第一个参数通常是 self,用于表示当前对象实例。
  • 实例方法只能被对象实例调用,它们可以访问和操作对象的属性。
  • 当调用实例方法时,解释器会自动将调用者作为第一个参数传递给方法的 self 参数。
  1. 类方法(Class Method)
  • 类方法使用装饰器 @classmethod 来定义,第一个参数通常是 cls,表示当前类本身。
  • 类方法可以被类本身调用,也可以被该类的所有对象实例调用。
  • 类方法可以访问和修改类属性,但不能访问实例属性,因为它们没有 self 参数。
  • 当调用类方法时,解释器会自动将调用者所属的类作为第一个参数传递给方法的 cls 参数。

下面是一个简单的示例来说明两者的使用区别:

class MyClass:
    class_variable = 0
    
    def __init__(self, x):
        self.x = x
        
    def instance_method(self):
        print("Instance method called")
        print("Value of x:", self.x)
        print("Class variable:", self.class_variable)
        
    @classmethod
    def class_method(cls):
        print("Class method called")
        print("Class variable:", cls.class_variable)

# 创建对象实例
obj = MyClass(5)

# 调用实例方法
obj.instance_method()

# 调用类方法
MyClass.class_method()

在这个示例中,instance_method 是实例方法,只能通过对象实例 obj 调用,而 class_method 是类方法,可以直接通过类 MyClass 调用。

class Class_1():
    def __init__(self):
        self.func_1()
        self.func_3()

    def func_1(self):
        print(1)

    def func_3(self):
        print(3)

Class_1()