一个包含普通方法、类方法和静态方法的示例类。通过这个例子,你可以更清楚地理解这三种方法的区别和使用场景。
示例代码
class Example:
class_attribute = "class value" # 类属性
def __init__(self, instance_value):
self.instance_attribute = instance_value # 实例属性
# 普通方法(实例方法)
def instance_method(self):
print("Instance method called")
print("Accessing class attribute via self:", self.class_attribute)
print("Accessing instance attribute:", self.instance_attribute)
# 类方法
@classmethod
def class_method(cls):
print("Class method called")
print("Accessing class attribute via cls:", cls.class_attribute)
# 不能直接访问实例属性,但可以通过实例调用
# print(self.instance_attribute) # 这行会报错
# 静态方法
@staticmethod
def static_method():
print("Static method called")
# 不能直接访问类属性或实例属性
# print(cls.class_attribute) # 这行会报错
# print(self.instance_attribute) # 这行会报错
# 创建实例
example_instance = Example("instance value")
# 调用实例方法
example_instance.instance_method()
# 调用类方法
Example.class_method()
example_instance.class_method() # 也可以通过实例调用类方法
# 调用静态方法
Example.static_method()
example_instance.static_method() # 也可以通过实例调用静态方法
输出
Instance method called
Accessing class attribute via self: class value
Accessing instance attribute: instance value
Class method called
Accessing class attribute via cls: class value
Static method called
详细说明
-
普通方法(实例方法) :
- 定义时,第一个参数是
self
,表示实例对象本身。 - 可以访问类属性和实例属性。
- 需要通过实例对象调用。
def instance_method(self): print("Instance method called") print("Accessing class attribute via self:", self.class_attribute) print("Accessing instance attribute:", self.instance_attribute)
调用:
example_instance.instance_method()
- 定义时,第一个参数是
-
类方法:
- 使用
@classmethod
装饰。 - 定义时,第一个参数是
cls
,表示类本身。 - 可以访问和修改类属性,但不能直接访问实例属性。
- 可以通过类名或实例对象调用。
@classmethod def class_method(cls): print("Class method called") print("Accessing class attribute via cls:", cls.class_attribute)
调用:
Example.class_method() example_instance.class_method()
- 使用
-
静态方法:
- 使用
@staticmethod
装饰。 - 定义时,没有默认的第一个参数(如
self
或cls
)。 - 不能访问类属性或实例属性。
- 适用于独立于类和实例的功能。
- 可以通过类名或实例对象调用。
@staticmethod def static_method(): print("Static method called")
调用:
Example.static_method() example_instance.static_method()
- 使用
通过这个例子,你可以看到:
- 普通方法需要通过实例调用,能够访问类属性和实例属性。
- 类方法可以通过类名或实例调用,主要用于访问和修改类属性。
- 静态方法可以通过类名或实例调用,但不能访问类属性或实例属性,主要用于与类和实例无关的功能。