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
posted @ 2020-06-13 20:37  cjxxl1213  阅读(152)  评论(0编辑  收藏  举报