定制自己的数据类型

1,python中内建函数isinstance的用法

语法:isinstance(object,type)

其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表((int,list,float)是一个列表)。

其返回值为布尔型(True or flase)。

若对象的类型与参数二的类型相同则返回True。若参数二为一个元组,则若对象类型与元组中类型名之一相同即返回True。

   a = "b"
>>> isinstance(a,str)
True
>>> isinstance(a,int)
False
>>> isinstance(a,(int,list,float))
False
>>> isinstance(a,(int,list,float,str))
True

2,内置函数issubclass的用法

语法:issubclass(sub,super)

检查sub类是不是super类的派生类

class A:

  pass

class B:

  pass

print issubclass(B,A)

B是A类的子类,返回True,不是则返回False

3,反射

pychon中的反射功能是由以下四个内置函数提供:

hasattr,getattr,setattr,delattr

improt(module_name),改四个函数分别用于对对象内部执行:检查是否含有有某成员,获取成员,设置成员,删除成员,导入模块以字符串方式导入。

class Foo(object):
  
    def __init__(self):
        self.name = 'python'
  
    def func(self):
        return 'func'
  
obj = Foo()
  
# #### 检查是否含有成员 ####
hasattr(obj, 'name')
hasattr(obj, 'func')
  
# #### 获取成员 ####
getattr(obj, 'name')
getattr(obj, 'func')
  
# #### 设置成员 ####
setattr(obj, 'age', 18)
setattr(obj, 'show', lambda num: num + 1)
  
# #### 删除成员 ####
delattr(obj, 'name')
delattr(obj, 'func')
            


4,内置atter

__getattr__

从对象中读取某个属性时,首先需要从self.__sicts__中搜索该属性,再从__getattr__中查找。

class A(object):  
    def __init__(self):  
        self.name = 'from __dicts__: zdy'  
  
    def __getattr__(self, item):  
        if item == 'name':  
            return 'from __getattr__: zdy'  
        elif item == 'age':  
            return 26  
  
a = A()  
print a.name # 从__dict__里获得的  
print a.age # 从__getattr__获得的

__setattr__

"__setattr__"函数是用来设置对象的属性,通过object中的__setattr__函数来设置属性:

class A(object):
    def __setattr__(self, *args, **kwargs):  
        print 'call func set attr'  
        return object.__setattr__(self, *args, **kwargs) 

__delattr__

"__delattr__"函数式用来删除对象的属性:

class A(object):
    def __delattr__(self, *args, **kwargs):  
        print 'call func del attr'  
        return object.__delattr__(self, *args, **kwargs)


 

原文地址:https://www.cnblogs.com/fengwu007/p/6757691.html