目录
- classmethod
- staticmethod
- property
classmethod的功能
- 将类函数可以不经过实例化而直接被调用
classmethod的用法
- 用法:
@classmethod
def func(cls,...):
do
- 参数介绍∶
cls
替代普通类函数中的self
,变为cls
,代表当前操作的是类
staticmethod的功能
- 将类函数可以不经过实例化而直接被调用,被该装饰器调用的函数不许传递self或cls参数,且无法再该函数内调用其它类函数或类变量
staticmethod的用法
- 用法:
@staticmethod
def func(...):
do
- 参数介绍:
- 函数体内无
self
或cls
参数
- 函数体内无
property的功能
- 将类函数的执行免去括弧,类似于调用属性(变量)
property的用法
- 用法︰
@property
def func(self):
do
-
参数介绍: 无重要函数说明
-
对使用
property
装饰的函数,如果要修改变量,就要使用@函数名.setter
来修改
class Test1(object):
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
# 对property装饰的函数,要修改变量用以下方法
@name.setter
def name(self, value):
self.__name = value
------------
insane
loafer
Process finished with exit code 0
实战
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2021/8/15 14:00
# @Author : InsaneLoafer
# @File : object_decorator2.py
class Test(object):
def __init__(self, a):
self.a = a
def run(self):
print('run')
self.jump() # 在self函数中可以调用类函数
self.sleep() # 可调用staticmethod函数
@classmethod
def jump(cls):
print('jump')
# cls.run() # 无法在使用类函数中调用self函数
@staticmethod
def sleep():
print('I want to sleep')
t = Test('a')
t.run()
# Test.run() # 会报错
Test.jump()
t.jump() # 还可实例化后进行调用
print('--------')
Test.sleep()
t.sleep() # 还可实例化后进行调用
class Test1(object):
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
# 对property装饰的函数,要修改变量用以下方法
@name.setter
def name(self, value):
self.__name = value
print('------------')
t1 = Test1(name='insane')
print(t1.name)
t1.name = 'loafer'
print(t1.name)
run
jump
I want to sleep
jump
jump
--------
I want to sleep
I want to sleep
------------
insane
loafer
Process finished with exit code 0