什么是
python
中的classmethod
,它的用途是什么?classmethod
装饰器对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。class Demo: @classmethod def klassmeth(*args): return args """ Usage:: >>>Demo.klassmeth() >>> (<class '__main__.Demo'>, 'span') """
klasssmeth 返回全部位置参数
- 不管怎么样调用
Demo.klassmenth
,它的第一个参数始终是Demo
类. 什么是
python
中的staticmethod
,它的用途是什么?staticmethod
是一个将类中的方法静态化,无需实例便可调用.#!/usr/bin/python # -*- coding: UTF-8 -*- class C(object): @staticmethod def f(): print('runoob'); C.f(); # 静态方法无需实例化 cobj = C() cobj.f() # 也可以实例化后调用
__slots__
用于什么地方?- 首先我们要明白一个概念.默认情况下
Python
在各个实例中名为__dict__
的字典里存储的实力属性,为了是底层的散列表提升访问速度,字典会消耗大量内存. - 通过
__slots__
类属性,能节省大量内存.方法事让解释器在元组中存储属性,而不是字典. - 继承自超类
__slots__
属性没有效果,Python
只会使用各个类中定义的__slots__
属性. - 定义
__slots__
属性之后,实例不能再有__slots__
中所列名称之外的其他属性. - 如果把
__dict__
这个名称添加到__slots__
中,是一个糟糕的选择. - 如果不把
__weakref__
加入__slots__
,实例就不能作为弱引用的目标.
- 首先我们要明白一个概念.默认情况下
classmethod&staticmethod 以及 __slots__
原文作者:Victorchi
原文地址: https://segmentfault.com/a/1190000016284316
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://segmentfault.com/a/1190000016284316
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。