Python中的静态方法和类方法的创建很简单,将他们包装在staticmethod和classmethod类的对象中即可。静态方法的定义中没有参数self,可以通过类直接调用。类方法的定义中有包含类似self的参数,通常被命名为cls。对于类方法,也可以通过对象直接调用,但是参数cls将自动关联到类。
静态方法的定义很简单,我们先来看看未使用装饰器如何定义一个静态方法,具体如下static_class_method.py程序所示:
static_class_method.py#!/usr/bin/env python# -*- coding: utf-8 -*-class Person: def static_method(): print('这里是一个静态方法') smethod = staticmethod(static_method) def class_method(cls): print('这里是一个类方法') cmethod = classmethod(class_method)Person.static_method()Person.class_method(Person)程序执行结果如下所示:这里是一个静态方法这里是一个类方法
在上面的程序中,我们手动对方法进行包装和替换,使其变成一个静态方法或者类方法,这样是可行的,但是却有点繁琐。在Python中有一种名为装饰器的语法,可用于像上述程序中那样包装方法,我们修改上面的static_class_method.py程序,具体如下所示:
static_class_method.py#!/usr/bin/evn python# -*- coding: utf-8 -*-class Person: @staticmethod def static_method(): print('这里是一个静态方法') @classmethod def class_method(cls): print('这里是一个类方法')Person.static_method()Person.class_method()程序执行结果如下所示:这里是一个静态方法这里是一个类方法
使用装饰器修改程序后,程序会看起来更加简洁,并且我们在调用他们时,也可以直接通过类进行调用而无需实例化类。在使用装饰器时,需要使用运算符@列出这些装饰器,当然也可以为一个方法指定多个装饰器。
当外部访问对象的属性时,可以对其进行拦截,要在属性被访问时执行一段代码,需要使用一些魔法方法。 下面的四个魔法方法提供了我们所需要的所有功能:
__getattribute__(self, name):在属性被访问时自动调用。
__getattr__(self, name):在属性被访问而对象没有这样的属性时自动调用。
__setattr__(self, name, value):试图给属性赋值时自动调用。
__delattr__(self, name):试图删除属性时自动调用。
上面四个方法相比较于函数property(),使用起来更加棘手一些,因为从某种程度上来讲,他们的效率更低,但是它们很有用,因为我们可在这些方法中编写处理多个特性的代码。当然,在可能的情况下还是尽可能的使用函数property()。在这里就不做过多的介绍,有兴趣的同学可以参考Python的官方文档。
本节介绍了静态方法和类方法以及如何使用装饰器包装静态方法和类方法。
下一节我们将会介绍Python中的一个重要的概念 — 迭代器,敬请关注!
如果有需要文中小程序的可以私信我哟!
创作不容易,还请点个赞!喜欢的小伙伴请点关注、收藏!
欢迎大家转发、评论!
#python##Python##Python基础##Python编程从入门到实践#