| 方法 | 定义 | 调用 |
|
实例方法 | 第一个参数必须是实例对象,一般约定为 “self”,通过它来传递实例的属性和方法(也可以传递类的属性和方法) | 只能由实例对象调用 |
| 类方法 | 第一个参数必须是类对象,一般约定为 “cls”,通过它来传递类的属性和方法(不能传实例的属性和方法) | 实例对象 和 类对象 都可以调用 |
| 静态方法 | 参数随意,但无法传递 类和实例 的任何属性和方法 | 实例对象 和 类对象 都可以调用 |
静态方法的特别说明:
1.方法体中不使用 “实例对象 和 类对象” 中的任何属性和方法
2. 静态方法主要是用来存放逻辑性代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作(独立的:便于使用和运维)
#1、 实例方法
# 装饰器:无
# 第一个参数:self,代表实例对象
# 调用方式:需要先创建类的实例,再通过实例来调用
# 用途:用于访问或修改实例的属性
class Person1(object):
# 类属性
sex = '女'
# 构造方法:每个类都有,名称固定为 __init__,声明类时自动执行
def __init__(self, name, age):
self.name = name # 实例属性
self.age = age
print("这是 构造方法...\n")
# 实例方法(又称:普通方法)
def instance_method(self):
print("instance_method:")
print(self.name) # 传递 实例属性
print(self.age)
print(self.sex) # 传递 类属性
if __name__ == '__main__':
p = Person1("李四", 20)
# 实例方法的调用:只能由 实例对象 调用,不能用 类对象 调用
p.instance_method()
# Person.instance_method() # 报错
# 2、类方法
# 装饰器:@classmethod
# 第一个参数:cls,代表类本身
# 调用方式:可以通过类名直接调用,也能通过实例调用
# 用途:常用于创建工厂方法,或者修改类属性
class Person2(object):
# 类属性
sex = '女'
# 构造方法:每个类都有,名称固定为 __init__,声明类时自动执行
def __init__(self, name, age):
self.name = name # 实例属性
self.age = age
print("这是 构造方法...\n")
# 类方法:可传递 类的属性和方法,但不能传递 实例的属性和方法
@classmethod
def class_method(cls):
print("class_method:")
# print(cls.name) # 传递 实例属性 报错
# print(cls.age)
print(cls.sex) # 传递 类属性
if __name__ == '__main__':
p = Person2("李四", 20)
# 类方法的调用:实例对象 和 类对象 均可
p.class_method()
Person2.class_method()
#3、 静态方法
# 装饰器:@staticmethod
# 第一个参数:无特殊参数
# 调用方式:可以通过类名直接调用,也能通过实例调用
# 用途:用于封装和类相关的工具函数,逻辑上属于类,但不依赖类或实例的状态
import time
class Person3(object):
# 类属性
sex = '女'
# 构造方法:每个类都有,名称固定为 __init__,声明类时自动执行
def __init__(self, name, age):
self.name = name # 实例属性
self.age = age
print("这是 构造方法...\n")
# 静态方法:无法传递 类和实例 的任何属性和方法
@staticmethod
def static_method():
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
# self.name # 报错
# cls.sex # 报错
if __name__ == '__main__':
p = Person3("李四", 20)
# 静态方法调用:实例对象 和 类对象 均可
p.static_method()
Person3.static_method()
这是运行结果:

静态方法的特别说明:
1.方法体中不使用 “实例对象 和 类对象” 中的任何属性和方法
2. 静态方法主要是用来存放逻辑性代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作(独立的:便于使用和运维)
与实例方法(instance method)和静态方法(static method)有哪些不同?&spm=1001.2101.3001.5002&articleId=148425853&d=1&t=3&u=79317db3a2bc47bb9fd8f994ca6ce840)
1566

被折叠的 条评论
为什么被折叠?



