Python中至少有三种比较常见的方法类型,即实例方法,类方法、静态方法。
实例方法
定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
调用:只能由实例对象调用。
类方法
定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
调用:类和实例对象都可以调用。
静态方法
定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
调用:类和实例对象都可以调用。
总结:
参数 | 可以调用的方法 | 可以调用的属性 | |
实例方法 | 无装饰器。 第一个参数必须是实例对象,该参数名一般约定为“self” | 实例方法、类方法、静态方法 | 类属性,实例属性 |
类方法 | 使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls” | 类方法、静态方法 | 类属性 |
静态方法 | 使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数。 | 实例方法、类方法、静态方法(通过类名调用) | 类属性(通过类名调用) |
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
class A():
def __init__(self):
self.status = 1
# pass
status = 1.5
@classmethod
def b(cls):
print("b")
print(cls.status)
cls.status = 2
cls.c()
@classmethod
def c(cls):
print("c")
print(cls.status)
print("*" * 20)
# A.d()
@staticmethod
def d():
print("d")
A().f()
A.g()
@staticmethod
def g():
print("g")
q = A.status
print(q)
def e(self):
w = A.status
self.d()
self.c()
def f(self):
print("f")
a = A()
# a.b()
print(a.status)
print(A.status)
A().d()
# print("-" * 50)
# a.e()