内置方法

Posted 游走在边缘的人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内置方法相关的知识,希望对你有一定的参考价值。

isinstance(obj,cls)和issubclass(sub,super)

isinstance(obj,cls)检查是否obj是否是类 cls 的对象

class Foo(object):
    pass
obj = Foo()
isinstance(obj, Foo)

issubclass(sub, super)检查sub类是否是 super 类的派生类

class Foo(object):
    pass
class Bar(Foo):
    pass
issubclass(Bar, Foo)

反射

反射:通过字符串映射到对象的属性

class BlackMedium:
    feature=‘Ugly‘
    def __init__(self,name,addr):
        self.name=name
        self.addr=addr

    def sell_house(self):
        print(‘%s 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不傻逼‘ %self.name)
    def rent_house(self):
        print(‘%s 黑中介租房子啦,傻逼才租呢‘ %self.name)

b1=BlackMedium(‘万成置地‘,‘回龙观天露园‘)

#检测是否含有某属性
print(hasattr(b1,‘name‘))
print(hasattr(b1,‘sell_house‘))

#获取属性
n=getattr(b1,‘name‘)
print(n)
func=getattr(b1,‘rent_house‘)
func()

# getattr(b1,‘aaaaaaaa‘) #报错
print(getattr(b1,‘aaaaaaaa‘,‘不存在啊‘))

#设置属性
setattr(b1,‘sb‘,True)
setattr(b1,‘show_name‘,lambda self:self.name+‘sb‘)
print(b1.__dict__)
print(b1.show_name(b1))

#删除属性
delattr(b1,‘addr‘)
delattr(b1,‘show_name‘)
delattr(b1,‘show_name111‘)#不存在,则报错

print(b1.__dict__)

setattr,delattr,getattr方法

用法

class Foo: #Dict
    def __init__(self,name):
        self.name=name

    def __getitem__(self, item): #item=‘namexxx‘
        # print(‘getitem...‘)
        return self.__dict__.get(item)

    def __setitem__(self, key, value):
        # print(‘setitem...‘)
        # print(key,value)
        self.__dict__[key]=value

    def __delitem__(self, key):
        # print(‘delitem...‘)
        # print(key)
        del self.__dict__[key]
T = Foo(‘alex‘)
# print(T.__dict__)
#查,会触发getitem的运行
print(T[‘name‘])
#改,会触发setitem的运行
T[‘name‘] = ‘Alex‘
print(T[‘name‘])
#删除,会触发detitem的运行
del T[‘name‘]
print(T[‘name‘])

__str__方法

__str__只在打印的时候会触发

class Foo:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    #在打印的时候会触发运行
    def __str__(self):
        return (‘<name:%s><age:%s><sex:%s>‘%(self.name,self.age,self.sex))

obj = Foo(‘alex‘,38,‘女‘)
print(obj)
‘‘‘
输出结果:
<name:alex><age:38><sex:女>
‘‘‘

del方法

析构方法,当对象在内存中被释放时,自动触发执行
注:如果产生的对象仅仅只是python程序级别的(用户级),那么无需定义__del__,如果产生的对象的同时还会向操作系统发起系统调用,即一个对象有用户级与内核级两种资源,比如(打开一个文件,创建一个数据库链接),则必须在清除对象的同时回收系统资源,这就用到了__del__。

class Open:
    def __init__(self,filename):
        print(‘open file.......‘)
        self.filename=filename

    def __del__(self):
        print(‘回收操作系统资源:self.close()‘)

f=Open(‘settings.py‘)
# del f #f.__del__()
print(‘----main------‘) #del f #f.__del__()

以上是关于内置方法的主要内容,如果未能解决你的问题,请参考以下文章

vs 2010代码片段

vs 2010代码片段

c#代码片段快速构建代码

缺少 SQL SERVER 2014 代码片段

为啥 gl_Color 不是片段着色器的内置变量?

VS Code中自定义Emmet代码片段