classmethod与staticmethod
1.classmethod
@classmethod # 把一个对象绑定的方法 修改成一个 类方法
第一,在方法中仍然可以引用类中的静态变量
第二,可以不用实例化对象,就直接用类名在外部调用这个方法
什么时候用@classmethod?
1.定义了一个方法,默认传self,但这个self没被使用
2.并且你在这个方法里用到了当前的类名,或者你准备使用这个类的内存空间中的名字的时候
import time
class Date:
def __init__(self,year,month,day):
self.year = year
self.month = month
self.day = day
@classmethod
def today(cls):
struct_t = time.localtime()
date = cls(struct_t.tm_year,struct_t.tm_mon,struct_t.tm_mday)
return date date对象 = Date.today()
print(date对象.year)
print(date对象.month)
print(date对象.day)
2. @staticmethod 被装饰的方法会成为一个静态方法
class User:
pass
@staticmethod
def login(a,b): # 本身是一个普通的函数,被挪到类的内部执行,那么直接给这个函数添加@staticmethod装饰器就可以了
print('登录的逻辑',a,b)
# 在函数的内部既不会用到self变量,也不会用到cls类 obj = User()
User.login(1,2)
obj.login(3,4)
class A:
country = '中国'
def func(self):
print(self.__dict__)
@classmethod
def clas_func(cls):
print(cls)
@staticmethod
def stat_func():
print('普通函数')
@property
def name(self):
return 'wahaha'
小结:
能定义到类中的内容
- 静态变量 是个所有的对象共享的变量 有对象\类调用 但是不能重新赋值
- 绑定方法 是个自带self参数的函数 由对象调用
- 类方法 是个自带cls参数的函数 由对象\类调用
- 静态方法 是个啥都不带的普通函数 由对象\类调用
- property属性 是个伪装成属性的方法 由对象调用 但不加括号
@staticmethod 不需要访问和类相关的属性或数据
@classmethod 可以访问和类相关(不和实例相关)的属性
如果你定义了一个方法它的返回值永远和类的属性及实例无关,结果永远不变,就用@staticmethod
如果你定义了一个方法它的返回值和只和类的属性有关,结果可变.就用@classmethod
classmethod与staticmethod的更多相关文章
- python基础知识讲解——@classmethod和@staticmethod的作用
python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...
- Python中的classmethod与staticmethod
首先,这是一个经典的问题. 我们首先做一个比较: classmethod的第一个参数是cls,即调用的时候要把类传入 这意味着我们我们可以在classmethod里使用类的属性,而不是类的实例的属性( ...
- classmethod 和 staticmethod
我一般很少用到. Talk is cheap, show you the code. #!/usr/bin/env python # -*- coding: utf-8 -*- ########### ...
- 洗礼灵魂,修炼python(47)--巩固篇—定义类的方法之@classmethod,@staticmethod
定义类的方法,相信你会说,不就是在class语句下使用def () 就是定义类的方法了嘛,是的,这是定义的方法的一种,而且是最普通的方式 首先,我们已经知道有两种方式: 1.普通方法: 1)与类无关的 ...
- python基础-abstractmethod、__属性、property、setter、deleter、classmethod、staticmethod
python基础-abstractmethod.__属性.property.setter.deleter.classmethod.staticmethod
- 【python】Python 中的 classmethod 和 staticmethod
Python 中的 classmethod 和 staticmethod 有什么具体用途? 推荐地址:http://www.cnblogs.com/wangyongsong/p/6750454.htm ...
- python classmethod 和 staticmethod的区别
https://stackoverflow.com/questions/12179271/meaning-of-classmethod-and-staticmethod-for-beginner 1. ...
- python的@classmethod和@staticmethod
本文是对StackOverflow上的一篇高赞回答的不完全翻译,原文链接:meaning-of-classmethod-and-staticmethod-for-beginner Python面向对象 ...
- python 封装,隐藏属性,绑定方法classmethod和staticmethod
[封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内容都隐藏起 ...
- Fluent Python: Classmethod vs Staticmethod
Fluent Python一书9.4节比较了 Classmethod 和 Staticmethod 两个装饰器的区别: 给出的结论是一个非常有用(Classmethod), 一个不太有用(Static ...
随机推荐
- Django学习路18_F对象和Q对象
F 对象: 可以使用模型的 A 属性和 B 属性进行比较 写法: 需要的数据对象 = 数据表(类名).objects.filter(列名__条件=F('列名2')) 需求: 查看男生数量比女生少 的公 ...
- PHP fgetss() 函数
定义和用法 fgetss() 函数从打开的文件中返回一行,并过滤掉 HTML 和 PHP 标签. fgetss() 函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止返回一个新行. ...
- C/C++编程笔记:流行的数字游戏【2048】,C语言400行源代码分享
游戏介绍 你玩过2048吗?2048是一款流行于各大网页和手机的数字游戏,手机安卓版推出的是<挑战2048>,之后的版本中还加入了双人对战的游戏模式,更加受到玩家的热捧. 2048的游戏规 ...
- 4.9 省选模拟赛 划分序列 二分 结论 树状数组优化dp
显然发现可以二分. 对于n<=100暴力dp f[i][j]表示前i个数分成j段对于当前的答案是否可行. 可以发现这个dp是可以被优化的 sum[i]-sum[j]<=mid sum[i] ...
- 70道Spring面试题
1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Jav ...
- ifstream
eof() 这个东西是返回文件是否达到尾部. 在读取错误的时候才会触发. 这点要小心,如果写在while(eof) 即使到了文件尾部, 但并没有读取错误,很有可能再次进入循环,然后出现读取错误 .ge ...
- TF签名是什么?比企业签名好在哪里?
现在苹果企业签名的服务大致分为三类,苹果企业签名.超级签名和TF签名,而TF签名TF签名又称 TestFlight 签名,是目前最稳定的签名方式. 「优势」 关键词:零风险;限制少;安 ...
- AsyncTask被废弃了,换Coroutine吧
本文主要是学习笔记,有版权问题还请告知删文 鸣谢:guolin@第一行代码(第三版) 你是否也在最近的代码中看见了 AsyncTask 被一条横杠划掉了 这表明--他要被Google放弃了 Googl ...
- CSS样式大全(网络收集整理)
CSS样式大全(网络收集整理 字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 { ...
- boost之signal的使用
文章目录 简介 代码 模板实现: 测试代码 运行结果 简介 boost是C++的一个扩展库,被称为C++准标准库,里面的组件很丰富,并且引用方便,85%的组件只需要引用头文件即可使用. 并且在嵌入式系 ...