我们都知道类名是不能够直接调用类方法的。在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'>

最新文章

  1. 25. vm安装redhat步骤
  2. iOS开发 cocoapods的安装以及使用
  3. (C/C++) Interview in English. - Memory Allocation/Deallocation.
  4. shiro中unauthorizedUrl不起作用
  5. ssh key报but this does not map back to the address – POSSIBLE BREAK-IN ATTEMPT!错误
  6. linux命令中&quot;|&quot;管道流的意思
  7. 快速构建Windows 8风格应用1-开发工具安装及模拟器使用
  8. js行内式遇到的一些问题 DOM对象和jq对象转换的问题
  9. 实现koa中的generator用法
  10. angular aot编译报错 ERROR in ./src/main.ts 解决方法
  11. C# LINQ语法详解
  12. 一个有关FWT&amp;FMT的东西
  13. BeanFactory和FactoryBean的区别
  14. Windows下 Robhess SIFT源码配置
  15. HashMap Hashtable LinkedHashMap 和TreeMap
  16. 4.7 引入NULL对象
  17. syslog - 日志文件详解
  18. 容器监控—阿里云&amp;容器内部服务监控
  19. SELECT中常用的子查询操作
  20. 使用jsonp跨域发送请求

热门文章

  1. Zabbix使用python批量添加主机及主机资产信息-从零到无
  2. (第一章第二部分)TensorFlow框架之图与TensorBoard
  3. LeetCode-040-组合总和 II
  4. ASP.NET Core 6框架揭秘实例演示[17]:利用IHttpClientFactory工厂来创建HttpClient
  5. linux作业--第七周
  6. 微信小程序下滑时能实现加载更多数据
  7. EXSI6.7 中给虚拟机磁盘扩容
  8. 15、mysql主从复制的原理
  9. Net中委托之三委托的高级应用
  10. emu8086实现两位数乘法运算