面向对象-内置方法

http://www.cnblogs.com/linhaifeng/articles/6204014.html

 item系列,把对象obj模拟称字典,可以像字典一样操作对象属性

class Foo:
    def __getitem__(self, item):
        print('getitem')
        print(item)
    def __setitem__(self, key, value):
        print('setitem')
        print(key,value)
    def __delitem__(self, key):
        print('delitem')
        print(key)
obj=Foo()
#获取属性
obj['name']

设置属性

class Foo:
    def __init__(self,name):
        self.name=name
    #获取,需要达到obj.属性名取值
    def __getitem__(self, item):#item='name'
        return self.__dict__.get(item)
    #设置,需要达到obj.属性名="属性值"
    def __setitem__(self, key, value):
        # print('setitem')
        # print(key,value)
        self.key=value
    def __delitem__(self, key):
        print('delitem')
        print(key)
obj=Foo('ya')
print(obj.__dict__)
obj['sex']='male'
print(obj.__dict__)

删除属性

class Foo:
    def __init__(self,name):
        self.name=name
    def __getitem__(self, item):
        return self.__dict__.get(item)
    def __setitem__(self, key, value):
        self.key=value
    def __delitem__(self, key):
        print('delitem')
        print(key)
        self.__dict__.pop(key)
        #或者如下方法
        # del self.__dict__[key]
obj=Foo('ya')
print(obj.__dict__)
del obj['name']
print(obj.__dict__)

 __str__()方法,打印时触发

都是类实例,为什么打印结果不一样?

d=dict({'name':'ya'})
print(d)
class Foo:
    pass
obj=Foo()
print(obj)

class Foo:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __str__(self):
        return str({'name':self.name,'age':self.age})
obj=Foo('ya',19)
print(obj)

__del__()方法,在程序结束前,做一定的操作

class Open:
    def __init__(self,filename):
        print("open file...")
        self.filenae=filename
    def __del__(self):
        print('回收操作系统资源')
f=Open('settings.py')
print('__main__')

手动回收资源 

class Open:
    def __init__(self,filename):
        print("open file...")
        self.filenae=filename
    def __del__(self):
        #和系统相关其他资源,在这里进行回收
        print('回收操作系统资源')
f=Open('settings.py')
del f#手动回收操作系统资源
print('__main__')

判断一个对象是否为某类实例

class Foo:
    pass
obj=Foo()
#判断一个对象是否为某类实例
print(isinstance(obj,Foo))

判断一个sub类是否为super类的派生类

class Foo:
    pass
obj=Foo()class Bar(Foo):
    pass
#判断一个sub类是否是super类的派生类
print(issubclass(Bar,Foo))

 

posted @ 2018-04-20 08:14  丫丫625202  阅读(92)  评论(0编辑  收藏  举报