python学习笔记(五)——静态方法、类方法、运算符重载
我们都知道类名是不能够直接调用类方法的。在C++中,把成员方法声明为 static 静态方法后可以通过类名调用。同样的在python中也可以通过定义静态方法的方式让类名直接调用。
静态方法
使用 @staticmethod 后紧跟着的方法为静态方法。
class test:
var = 10
@staticmethod
def func():
print("var = ",test.var)
ts=test() #实例化
ts.func() #使用对象调用静态方法
test.func() #使用类名调用静态方法
输出:
var = 10
var = 10
在静态方法的参数列表中没有 self ,也就意味着它不可以调用我们类中的实例属性和实例方法。但是可以通过我们的类名调用类属性。
类方法
使用 @classmethod 后面紧跟着的方法为类方法。同样,类方法也支持类名访问和实例访问。
class test:
var = 10
@classmethod
def mytest(cls): # cls 代表类名
print("这是类方法")
ts=test() #实例化
ts.mytest() #使用对象调用类方法
test.mytest() #使用类名调用类方法
输出:
这是类方法
这是类方法
在类方法的参数列表中 cls 是类名的代表,也就是说,在类方法中可以调用静态方法和类属性。
class test:
@staticmethod
def func():
print("这是静态方法")
@classmethod
def mytest(cls):
print("这是类方法")
test.func()
ts=test()
ts.mytest()
test.mytest()
输出:
这是类方法
这是静态方法
这是类方法
这是静态方法
并且,由于静态方法是全局的,也是可以调用类方法的。
运算符重载
在python中形如 __xxx__ 的方法不需要我们手动调用,在运行至条件发生时会自动调用。比如我们的 __init__ 或 __del__ 等。
我们现在重载 “+” 运算,使其对象相加只加年龄,那么就可以这么写。
class test:
def __init__(self, name, age):
self.name = name
self.age = age
def __add__(self, other): #重载
return self.age + other.age
ts1 = test("张三",18)
ts2 = test("李四",20)
age = ts1 + ts2
print(age)
输出:
38
在 python 中调用 print() 打印实例对象时会调用__str__(),输出一些信息。如果__str__()中有返回值,就会打印其中的返回值。
ts = test("张三",18)
print(ts)
输出:
<__main__.test object at 0x00000272E61C35F8>
我们现在重载 str 使得调用print() 时输出我们想要的信息。实例名 + 类型。
class test:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return '名字是%s,类型是%s'%(self.name,type(self))
ts = test("张三",18)
print(ts)
输出:
名字是张三,类型是<class '__main__.test'>
python学习笔记(五)——静态方法、类方法、运算符重载的更多相关文章
- C#学习笔记_13_静态类&Sealed&运算符重载&抽象类
13_静态类&Sealed&运算符重载&抽象类 静态类 由static修饰的类就是静态类 特点: 静态类不能实例化对象 静态类中不允许写非静态的成员 静态类只能由一个父类Obj ...
- Python学习笔记五
一. 递归 递归函数: def a (): print ("from b") b() def b(): print("from a ") a() a() 递推和 ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- Python学习笔记 - day3 - 数据类型及运算符
Python的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...
- python学习笔记五 模块上(基础篇)
模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...
- python学习笔记(五)、抽象
不知不觉已经快毕业一年了,想想2018年过的可真舒适!!!社会就像一锅水,不同地方温度不同,2018年的我就身处温水中,没有一丝想要进取之心. 1 抽象 抽象在程序中可谓是神来之笔,辣么什么是抽象呢? ...
- python学习笔记五——数据结构
4 . python的数据结构 数据结构是用来存储数据的逻辑结构,合理使用数据结构才能编写出优秀的代码.python提供的几种内置数据结构——元组.列表.字典和序列.内置数据结构是Python语言的精 ...
- Python学习笔记五:错误与异常
一:常见异常与错误 BaseException 所有异常的基类SystemExit 解释器请求退出KeyboardInterrupt 用户中断执行(通常是输入^C)Exception 常规错误的基类S ...
- Python学习笔记五(读取提取写入文件)
#Python打开读取一个文件内容,然后写入一个新的文件中,并对某些字段进行提取,写入新的字段的脚本,与大家共同学习. import os import re def get_filelist(dir ...
- Python学习笔记(五)函数和代码复用
函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...
随机推荐
- hadoop 无法访问50070
windows无法访问hadoop web端口 windows hosts文件:C:\Windows\System32\drivers\etc centos防火墙没有关,关闭参考 hadoop cor ...
- 使用PLSQL 创建Oracle数据库用户并设置权限
转至https://blog.csdn.net/ying890/article/details/14083029?utm_medium=distribute.pc_relevant_download. ...
- PIL-ImageFont:OSError: cannot open resource
使用PIL时,创建某个字体Font对象时出错: font=ImageFont.truetype('Arial.ttf',36) 可能原因有两个: 1.PIL无法定位到字体文件的位置. 可以通过提供绝对 ...
- Anaconda 下 Jupyter 更改默认启动路径方法(转)
https://www.cnblogs.com/awakenedy/p/9075712.html
- Python——函数设计与案例
函数设计与案例 一. 函数的定义与调用 如果在开发程序时,需要多次使用某块代码,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小块,这就是函数 打印如下 print('人生 ...
- redirect route 路由传参
return redirect()->route('exams.sign',['token'=>$token,'id'=>$result['id']]); // 签到页面 Route ...
- TP5框架中实现多条件登录(自写代码,密码未md5()加密)
HTML代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- petite-vue源码剖析-ref的工作原理
ref内部的工作原理十分简单,其实就是将指令ref.:ref或v-bind:ref标识的元素实例存储到当前作用域的$refs对象中,那么我们就可以通过this.$refs获取对应的元素实例.但由于作用 ...
- Centos8 Yum 安装Nginx指定版本
查看系统和EPEL的nginx版本 dnf info nginx 通过官方 yum 源安装nginx vi /etc/yum.repos.d/nginx.repo 列出所有版本 ...
- LGP5363题解
感觉博弈题都是高大上神秘结论... 感谢@KaiSuoShuTong 开锁疏通愿意教我这题的博弈部分/qq 考虑每次移动棋子,实际上是有一车 \(a_i\),每次操作相当于令 \(a_i-c,a_{i ...