面向对象的进阶

反射:

反射的作用:
当你希望通过字符串---> 程序的变量名(类名\函数名\变量名\方法名\对象名)
你就可以考虑反射
某个命名空间中的某个"变量名",获取这个变量名对应的值
反射的四个内置函数:
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

 

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

 

 

 

 

 

 

 






 

posted @ 2018-12-10 17:45  Py浪涛  阅读(141)  评论(0编辑  收藏  举报
你想听歌吗o((;=゚ 3゚ =))o~♪