python使用笔记24--面向对象编程2
类方法
类里面自带的方法,不用实例化就可以调用,想象,模型上自带的功能
类方法是公共的,在实例方法里面可以随意调用
但是在类方法里不能调用实例方法,不能使用实例变量,但是他可以调用其他的类方法
1 @classmethod 2 def help(cls):#cls:Staff 3 ''' 4 一些公共的方法,就用类方法 5 类方法不能调用实例方法,不能调用实例变量 6 ''' 7 print('这里的员工都是来自%s'%cls.nationnality)
类变量
类在定义好的时候,就把这个变量定义好了,也是公共的
1 class Staff: 2 '''员工类''' 3 nationnality = 'China'#类变量,在定义类时,就已经在类里面了
实例方法
实例化后才能调用的方法
实例变量
实例化后才能调用的变量
属性方法
看起来像变量的函数
1 class User: 2 @property#属性方法 3 def work_age(self): 4 create_time = 1528860238 5 return (time.time()-create_time) / (365*24*60*60)
静态方法
一个和类没有关系的方法,就是一个普通的方法,只是写在类里面而已
不能调用实例方法,也不能调用类方法
1 @staticmethod 2 def help(): 3 print('我是帮助文档,这个类时用户类')
继承
子类继承父类公共的方法,也可以重写父类的方法
父类的私有变量和私有方法不能继承
重写:
1.直接覆盖父类方法
2.在父类的基础上添加新的功能
1 class Car: 2 def run(self): 3 print('run...') 4 5 6 class CcxCar(Car): 7 def run(self):#重写,覆盖式的 8 print('拐弯跑') 9 10 class CmcCar(Car): 11 def run(self):#重写,在父类方法的基础上做修改 12 super().run()#super():自动找父类 13 print('充电')
魔法方法
一个类里面有一些特殊作用的方法,不需要你调用,在一些情况下会自动运行
类里面__funcname__都是魔法方法,有一些特殊作用,比如__init__()等等
1 class Xxl: 2 def __init__(self): 3 self.name = 'xxl' 4 self.sex = '女'
字典转对象
1 class DictToObject(dict): 2 '''字典转对象''' 3 def __getattr__(self, item): 4 #__getattr__的作用是通过x.xx的时候它会自动调用__getattr__这个方法,把你要获取的属性的key传过来 5 #比如说 user.name ,它就是调用了__getattr__,把name传给__getattr__函数,然后返回这个name的值 6 value = self[item] 7 if isinstance(value,dict): 8 value = DictToObject(value)#如果是字典类型,直接返回DictToObject这个类的对象 9 10 elif isinstance(value,list) or isinstance(value,tuple): 11 #如果是list,循环list判断里面的元素,如果里面的元素是字典,那么就把字典转成DictToObject的对象 12 value = list(value) 13 for index,obj in enumerate(value): 14 if isinstance(obj,dict): 15 value[index] = DictToObject(obj) 16 17 return value