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().同样,你也可以自己创建函数, ...
随机推荐
- Scala学习笔记(详细)
第2章 变量 val,var,声明变量必须初始化:变量类型确定后不可更改 数据类型:与java有相同的数据类型,在scala中数据类型都是对象 特殊类型:Unit:表示无值,只有一个实例值写出(),相 ...
- WPS:将题注与章节连接起来
右键图片添加题注,在题注设置中勾选题注编号中的包含章节编号
- bower install 报错fatal: unable to access 'https://github.com/angular/bower-angular-touch.git/'类错误解决方法
bower install时出现很多unable to access 'https://github.com/angular/bower-angular-touch.git/'类似的错误, 方法一:( ...
- LeetCode-023-合并K个升序链表
合并K个升序链表 题目描述:给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链 ...
- 搞懂MySQL(各种)索引类型及其区别
索引的概念介绍: 1.聚集索引 聚集索引:指索引项的排序方式和表中数据记录排序方式一致的索引 也就是说聚集索引的顺序就是数据的物理存储顺序.它会根据聚集索引键的顺序来存储表中的数据,即对表的数据按索 ...
- 记一次NAS故障分析(ZFS NFS)
问题: 使用vdbench进行单层100w目录,每个目录30个文件,共3000w文件读写时,在创建文件得时候IO会出现断断续续得情况. 分析过程: 1. nfs抓包分析 使用vdbench创建一个文 ...
- 使用 Xshell 连接矩池云 GPU服务器
下单租用 租用成功 打开软件 完成 错误用法不能这样使用
- U3D破解方法
文件我的云盘里面有,然后操作如下:Win版破解方法:1.安装Unity后(联网破解不成功就断网试试),运行破解补丁.2.点击Browse选择Unity所在路径 例如我的Unity安装路径 F:\Sof ...
- XSS攻击防范
前端安全系列之XSS攻击防范 1.使用textContent 2.使用HTML转义 把JS中的标签转成字符 3.对于链接跳转 禁止含有'javascript:'开头的字符 4.标签属性中含有恶意执行代 ...
- mxnet源码阅读笔记之include
写在前面 mxnet代码的规范性比Caffe2要好,看起来核心代码量也小很多,但由于对dmlc其它库的依赖太强,代码的独立性并不好.依赖的第三方库包括: cub dlpack dmlc-core go ...