zoukankan      html  css  js  c++  java
  • 面向对象的进阶

    反射:

    反射的作用:
    当你希望通过字符串---> 程序的变量名(类名函数名变量名方法名对象名)
    你就可以考虑反射
    某个命名空间中的某个"变量名",获取这个变量名对应的值
    反射的四个内置函数:
    hasattr
    getattr
    setattr
    delattr
    反射:
     反射类
    class Person:
        role = '人类'
        @staticmethod
        def show_courses():
            print('所有课程')
    Person.role == getattr(Person,'role')
    Person.show_courses() == getattr(Person,'show_courses')()
    ret = getattr(Person,'show_courses')
    ret()
    
     反射对象
    class A:
        def __init__(self,name):
            self.name = name
        def eat(self):
            print('%s is eating'%self.name)
    cat = A('小熊')
    if hasattr(cat,'name'): #hasattr 判断'name' 是否存在 存在返回True
        print(getattr(cat,'name'))
    if hasattr(cat,'eat'):
        print(getattr(cat,'eat'))
    getattr(cat,'eat')()
    
     反射模块
    import time
    print(time.time()) #'time'
    print(getattr(time,'time')())
    
     反射文件
    具体的例子:
    from sys import modules
    a = 1
    b = 2
    lst = [1,2,3]
    class Manager:pass
    class Student:pass
    class Teacher:pass
    getattr(modules[__name__],'Student')
    identify = input('>>>').strip()
    ret = getattr(modules[__name__],identify)
    print(ret)
    三个常用的装饰器方法:
    @classmethod
    用这个装饰器装饰一个类,那么这个类就变成类方法
    特点:不使用对象的属性,但是使用类的属性
    
    @staticmethod
    用这个装饰器来装饰的方法就变成静态方法
    特点:既不使用类的方法 也不使用对象的方法
    @property
    这个装饰器可以把一个方法伪装成一个属性
    内置方法:
    __new__  构造方法,在对象实例化的时候执行这个方法,为对象创建一个空间,
    __init__ 初始化方法 在对象实例化的时候执行这个方法 但是在__new__方法之后执行
    __call__ 这个内置方法,在对象名加括号() 的时候执行
    __str__  这个方法可以让一个对象显示更清晰,返回一个字符串,
    __repr__ 和str方法一样,
    __del__  在对象删除前,做收尾工作
    __len__ 
    __eq__   ==
    item系列  对象[参数

     单例模式:

    class Teacher:
          flag = None
         def __new__(cls, *args, **kwargs):
               if cls.flag is None:
                       cls.flag = object.__new__(cls) # 这一句话只能走一次
               return cls.flag
          def __init__(self,name):
               self.name = name

    面向对象进阶的一些内置方法

     
    
    
    





  • 相关阅读:
    Git 学习笔记(W,I,P)
    DirectX API 编程起步 #01 项目设置
    #1004 Let the Balloon Rise
    #1003 Max Sum
    人生的第一个博客(●'◡'●)ノ♥--开博典礼
    2053——switch game
    在Activity间传递数据的四种方法及返回结果
    安卓学习第38课——ProgressDialog
    安卓学习第37课——DatePickerDialog、TimePickerDialog
    安卓学习第36课——PopupWindow
  • 原文地址:https://www.cnblogs.com/changtao/p/10022784.html
Copyright © 2011-2022 走看看