开始之前要知道Python类中两个概念:字段和方法
“字段”和“方法”都有“动态”和“静态”之分,即:
- 字段
- 静态字段
- 动态字段 - 方法
- 静态方法
- 动态方法
以下事例标明了:“静态字段”,“动态字段”以及“动态方法”是什么样子的,因为显而易见,就不用语言进行过多描述:
#!/usr/bin/env python # _*_ coding: utf-8 _*_ """ @author: caimengzhi @license: (C) Copyright 2013-2017. @contact: 610658552@qq.com @software: pycharm 2017.02 @project: luffy @file: 1.py @time: 2018/3/3 18:04 @desc: """ # class A: # def __test(self): # print("A.test") # # def func(self): # print("A.func") # self.__test() # # # class B(A): # def __test(self): # print("B.test") # # # b = B() # b.func() # class A: # def __test(self): # print("A.test") # # def func(self): # print("A.func") # self.__test() # # # class B(A): # def __test(self): # print("B.test") # # # b = B() # b.func() # class C: # def __test(self): # print("c.test") # # class A: # def func(self): # print("A.func") # self.__test() # # # class B(C,A): # def __test(self): # print("B.test") # # b = B() # b.func() # print(B.__mro__) # (<class '__main__.B'>, <class '__main__.A'>, <class '__main__.C'>, <class 'object'>) # coding:utf-8 # coding:utf-8 class People: # 下面是静态字段 city = "南京" def __init__(self, name, age, sex): # 下面是动态字段 self.name = name self.age = age self.sex = sex # 下面是动态方法 def say_hello(self): print("%s say hello" % self.name) print(self) # 下面是静态方法 @staticmethod def sleep(): print("sleep") # 下面是类方法 @classmethod def eat(cls): print("eat") print(cls) xiaoming = People("小明", 20, "男") xiaoming.sleep() # 结果是 sleep xiaoming.say_hello() # 结果是 小明 say hello <__main__.People object at 0x0000000000E0DEB8> print(xiaoming.city) # 结果是 南京 People.sleep() # 结果是 sleep People.say_hello(xiaoming) # 结果是 小明 say hello <__main__.People object at 0x0000000000E0DEB8> print(People.city) # 结果是 南京
People.eat() # 结果是eat <class '__main__.People'>
xiaoming.eat() # 结果是eat <class '__main__.People'>
其实“静态方法”只需要执行两步操作,就可以转换成“静态方法”
1. 在方法前加上:@staticmethod
2. 把“动态方法”括号中的“self”去掉
那么关于这四种类型,有什么特点?以下进行总结:
- 四种类型,均可以被“对象”进行调用,但不建议使用“对象”调用“静态方法”和“静态字段”,而建议使用“类”对其进行调用
- “动态方法”和“动态字段”只能由“对象”进行调用,而无法使用“类”进行调用(因为动态的方法和字段都要传入参数)