0x01 staticmethod
经常有一些跟类有关系的功能,但是在运行时又不需要实例和类的参与,在这个时候就需要使用静态方法
。
比如更改环境变量或者修改其他类之外的东西,就需要使用静态方法
,虽然这种情况可以直接使用类外的函数来解决,但是这个破坏了类的封装性,使代码难以维护。
IND = 'ON'
class Kls(object):
def __init__(self, data):
self.data = data
@staticmethod
def checkind():
return (IND == 'ON')
def do_reset(self):
if self.checkind():
print('Reset done for:', self.data)
def set_db(self):
if self.checkind():
self.db = 'New db connection'
print('DB connection made for: ', self.data)
ik1 = Kls(12)
ik1.do_reset()
ik1.set_db()
0x02 classmethod
只在类中运行,而不再实例中运行的方法,就是类方法
。也可以在类外定义一个功能相同的函数来替代类方法
,但是这个破坏了类的封装性。
不管是从实例调用还是从类调用类方法,它的第一个参数都是类
。
class Kls(object):
no_inst = 0
def __init__(self):
Kls.no_inst = Kls.no_inst + 1
@classmethod
def get_no_of_instance(cls_obj):
return cls_obj.no_inst
ik1 = Kls()
ik2 = Kls()
print ik1.get_no_of_instance()
print Kls.get_no_of_instance()

转载
欢迎关注微信公众号(coder0x00)或扫描下方二维码关注,我们将持续搜寻程序员必备基础技能包提供给大家。
网友评论