Twenty-two 模块特殊方法

 

1、python特殊的双下方法

  双下方法不是提供给你用的,他是给python源码的开发者用的

  isinstance 判断此对象是不是该类(或者是该类的子类)实例化的对象

# len(对象) 如果此类中有__len__ 就_方法会自动执行__len_
class A:
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.sex = ''

    def __len__(self):
        # print(666)
        return len(self.__dict__)
a = A('barry', 18)
len(a) 

2、单例模式

class A:
    __instance = None  # 为了防止外面改而导致无法创建

    def __init__(self,name,age):
        self.name =name
        self.age = age

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            obj = object.__new__(cls)
            cls.__instance = obj
        return cls.__instance

3、实例化对象, 类,其他py文件 本py文件

  反射:通过字符串去操作对象(类,空间等等)的属性或方法

  hasattr  getattr  setattr  delattr

class A:
    country = 'China'
    area = '深圳'

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def func(self):
        print(666)


obj = A('忠敏',18)
print(obj.name)
# 找有没有,有则True,无则False
print(hasattr(obj,'name'))
# 有则运行,无则返回None,没有找到且不写None则报错
print(getattr(obj,'sex',None))

setattr(obj,'sex','')  # 设置

delattr(obj,'name')  # 删除

 

posted @ 2019-01-18 22:29  pythonernoob  阅读(109)  评论(0)    收藏  举报