类的常用装饰器

classmethod

功能
  • 将类函数可以不经过实例化而直接被调用
用法
1
2
3
@classmethod
def func(cls, ...):
do
参数介绍
  • cls替代普通类函数中的self,
  • 变为cls,代表当前操作的是类

staticmethod

功能
  • 将类函数可以不经过实例化而直接被调用,
    被改装饰器调用的函数不许传递self或cls函数,
    且无法在该函数内调用其他类函数或类变量
用法
1
2
3
@staticmethod
def func(...):
do
参数介绍
  • 函数体内无cls或self参数

property

用法
1
2
3
@property
def func(self):
do
参数介绍
  • 无重要参数说明

代码

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# coding:utf-8

class Test(object):
def __init__(self, a):
self.a = a

def run(self):
print('run')
self.dump()
self.sleep()

@classmethod
def dump(cls):
print('dump')
# cls.run()
# 无法在一个classmethod函数中调用self函数
@staticmethod
def sleep():
# self.dump()
print('i want sleep')

t = Test('a')
t.run()
# Test.dump()
# print('------')
# Test.sleep()
# t.sleep()
# t.dump()

class Test1(object):
def __init__(self, name):
self.__name = name

@property
def name(self):
return self.__name

@name.setter
def name(self, value):
self.__name = value

t1 = Test1(name='dewei')
print(t1.name)
# t1.name = '小慕'
# print(t1.name)
t1.name = '小慕'
print(t1.name)