issubclass在python中的意思_python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,d...

isinstance   是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型

issubclass  是python 中的内置函数,  用来一个类A是不是另外一个类B的子类   issubclass(子类,父类)

classFoo:

pass

obj=Foo()

print(isinstance(obj,Foo))# 判断实例化的foo是不是这个类

#判断结果为True

print(isinstance(obj,Foo)) 它就等同于

======》》》print(type(obj) is Foo) #obj的类是Foo

再举个例子:

print(isinstance('abc',str))   字符串的类是 str

print(isinstance(123,int))      数字的类是 int

反射:通过字符串来操作类与对象的属性,  这种操作成为反射

有四个   hasattr         getattr          setattr       delattr

这四个的用法 都为hasattr /setarr/getattr/delattr (类名,‘字符串’)类名后面加的都是字符串classPeople:

country='china'def __init__(self,name):

slef.name=name

def tell(self):

print('%s is aaa'%self.name)

obj=People('egon')

#1、hasattr 判断有没有这个属性

print(hasattr(People,'country')) #True====>>等同于

print('country' inPeople.__dict__)

#2、getattr 函数属于内置函数, 可以通过函数名获取

x=getattr(People,'country')

print(x) #打印结果 China

若是获取的类里没有这个属性 则在字符串后加个 None 不然的话会报错

x=getattr(People,'country1',None)

print(x)

#3、setarr 通过这个函数来设置属性 添加属性

setattr(People,'x',111)

print(People.x)

#打印结果为111#4、delattr 用来删除对象的属性

delattr(People,"country")

print(People.__dict__)

#{'__module__': '__main__', '__init__': , 'tell': , '__dict__': , '__weakref__': , '__doc__': None}

在来看 country 这个属性已经删掉了

__str__ 方法:如果要把一个类的实例 变成str,就需要实现特殊方法__str__(),下面说 怎么用:

我想要拿到egon的个人信息 姓名年龄以及性别 要是按照如下就很难拿到classPeople:

def __init__(self,name,age,sex):

self.name=name

self.age=age

self.sex=sex

obj=People('egon',18,'male')

print(obj)

#打印结果<__main__.people object at>要是拿到信息 就地像以下方法拿到

print(obj.name)

print(obj.age)

print(obj.sex)

#打印结果

egon18male

这样就感觉比较复杂 可以在类内部添加一个__str__ 函数 试试呢classPeople:

def __init__(self,name,age,sex):

self.name=name

self.age=age

self.sex=sex

def __str__(self):return '名字:%s,年龄:%s,性别:%s'%(self.name,self.age,self.sex)

obj=People('egon',18,'male')

print(obj)

#打印结果

名字:egon,年龄:18,性别:male

__del__方法  删除

当对象在内存中被释放时, 自动触发执行

如果产生的对象仅仅只是在python程序级别的(用户级), 那么无需定义__del__,如果产生的对象的同时 还会像操作系统发起系统调用,即一个对象有用户级与内核级两种资源, 比如(打开一个文件, 创建一个数据库连接,)则必须在清楚对象的同时 回收系统资源 这就用到了__del__.

classFoo:

def __del__(self):

print('执行我了’)

f1=Foo()

del f1

print('------->')

#输出结果

执行我了------->

元类:元类就是帮你创建类的‘家伙‘,在python中, 类也是对象,这样的对象就是通过袁磊创建的, 元类就是‘类的类’。之前提到的type实际上就是元类, 在python中所有的类都是用type创建的。到此我们也能够立即为什么说在python中一切皆对象了吧,int,string,function,以及class

所有的多少对象 ,他们都能够从一个类中创建。

2、用内置的元类type,来实例化得到我们的类

class_name='Chinese'#创建类名

class_bases=(object,) #定义父类

class_body="""#定义类的特征与属性等代码体

country="China"def __init__(self,name,age,sex):

self.name=name

self.age=age

self.sex=sex

def speak(self):

print('%s speak Chinese' %self.name)"""class_dic={} #目前类的属性里的名称空间名字都还为空

exec(class_body,{},class_dic) #exec 括号里面是代码体,然后是全局名称空间里的名称, 再然后是局部名称空间里的名称,全局的名称空间没有, 局部的名称空间会在类里产生。

类的三大要素

print(class_name,class_bases,class_dic) #类的三大要素,类名。父类,已经类的属性(名称空间包括变量以及函数)

Chinese=type(class_name,class_bases,class_dic) #创建类

print(Chinese)

p=Chinese('egon',18,'male')

print(p.name,p.age,p.sex)

__call__:  调用对象 会自动触发对象下的绑定方法__call__的执行,

然后将对象本身当做第一个参数传给self,将调用对象时 括号内的值传给*args,**kwargs

def __call__(self,*args,**kwargs):

print('__call__'args,kwargs)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值