这个报错是因为在你的代码中存在无限递归调用。在 Class_1
的构造函数中,你调用了 self.func_1()
,然后在 func_1
方法中又调用了 Class_1().func_3()
,这个调用应该是 self.func_3()
,因为你想要调用同一个类的方法,而不是创建一个新的类对象。此外,func_3
方法需要接受 self
参数。
类方法和实例方法是面向对象编程中常用的两种方法类型,它们之间的主要区别在于调用方式和作用对象:
- 实例方法(Instance Method):
- 实例方法是在类中定义的函数,第一个参数通常是
self
,用于表示当前对象实例。 - 实例方法只能被对象实例调用,它们可以访问和操作对象的属性。
- 当调用实例方法时,解释器会自动将调用者作为第一个参数传递给方法的
self
参数。
- 类方法(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()