python 静态方法 类方法 的作用_浅谈python 类方法/静态方法

1.类方法

类方法是从属于"类对象"的方法。类对象可以通过装饰器@classmethod来定义,具体格式如下:

?

1

2

3

@classmethod

def 类方法名(cls [, 形参列表]):

方法体

要点如下:

@classmethod必须位于方法的上面一行

第一个参数cls(class的缩写,和前面笔记介绍的self类似),必须要有,代指"类对象"本身。

调用类方法格式:类名.类方法名(参数列表)。参数列表中不需要也不能给cls参数进行传值,解释器会自动赋值。

类方法中可以访问实例属性和实例方法会导致错误,因为有类不一定有对象。

子类继承父类方法时,传入cls是自身对象,而非父类对象。(后面的笔记会有介绍)

代码示例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

class Student:

count= 0 # 类属性

"""定义方法"""

@classmethod

def print_count(cls):

"""cls参数代表类对象"""

print(Student.count)

"""调用类方法"""

print("调用时,不传递cls参数")

Student.print_count()

运行结果:

调用时,不传递cls参数

0

2.静态方法

在python中,允许定义于”类对象“无关的方法,称为"静态方法"。

"静态方法"和在模块中定义的普通方法没有什么区别,只不过"静态方法"放到了"类的名字变量空间",需要通过类调用。

静态方法通过装饰器@staticmethod来定义,格式如下:

?

1

2

3

@staticmethod

def 静态方法名([形参列表]):

方法体

要点如下:

@staticmethod必须位于方法上面一行

调用静态方法格式:类名.静态方法名(参数列表)

静态方法中访问实例属性和实例方法会导致错误

代码示例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

class Student:

count= 0 # 类属性

@staticmethod

def add(a, b):

"""与类无关的静态方法"""

"""因为静态方法从属于类,所以是可以操作类属性和类方法"""

print("{0}+{1}={2}".format(a, b, a+b))

return a+ b

# 调用静态方法

Student.add(20,30)

运行结果:

20+30=50

res=50

3.实例方法/类方法/静态方法的区别

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

class MyClass:

# 类属性

class_attr= 0

def __init__(self, obj_attr):

self.obj_attr= obj_attr

def instance_method(self):

return "instance method called",self

@classmethod

def class_method(cls):

return "class method called",cls

@staticmethod

def static_method():

return "static method called"

print("调用实例方法")

obj1= MyClass("obj_attr1")

print(obj1.instance_method())

print("--" * 20)

print("调用类方法")

print(MyClass.class_method())

print("--" * 20)

print("调用静态方法")

print(MyClass.static_method())

运行结果:

调用实例方法

('instance method called', <__main__.MyClass object at 0x10ca93310>)

----------------------------------------

调用类方法

('class method called', )

----------------------------------------

调用静态方法

static method called

注意: 以下讨论的属性、方法均指公开的类型,非私有的。

实例方法:

能读取、修改实例属性

能调用实例方法

能读取、修改类属性

能调用类方法

能调用类静态方法

调用方式:对象名.实例方法名(参数列表),编译器自动传递self参数

类方法:

不能读取、修改实例属性

不能用实例方法

能读取、修改类属性

能调用类方法

能调用类静态方法

调用方式:类名.类方法名(参数列表),编译器自动传递cls参数

静态方法:

不能读取、修改实例属性

不能用实例方法

能读取、修改类属性

能调用类方法

能调用类静态方法

调用方式: 类名.静态方法名(参数列表),不需要cls参数

类方法和静态方法,功能非常相近,可以相互替代, 但是从规范的角度来说,请按照实例方法操作对象,类方法操作类,静态方法为和类无关的通用方法。

以上就是浅谈python 类方法/静态方法的详细内容,更多关于类方法/静态方法的资料请关注服务器之家其它相关文章!

原文链接:http://www.niefajun.com/archives/python-%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1-09-%E7%B1%BB%E6%96%B9%E6%B3%95%E9%9D%99%E6%80%81%E6%96%B9%E6%B3%95

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值