python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类
isinstance 是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型
issubclass 是python 中的内置函数, 用来一个类A是不是另外一个类B的子类 issubclass(子类,父类)
class Foo:
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 (类名,‘字符串’)类名后面加的都是字符串 class People:
country ='china'
def __init__(self,name):
slef.name=name
def tell(self):
print('%s is aaa'%self.name) obj=People('egon') #、hasattr 判断有没有这个属性
print(hasattr(People,'country')) #True
====>> 等同于
print('country' in People.__dict__) #、getattr 函数属于内置函数, 可以通过函数名获取 x=getattr(People,'country')
print(x) #打印结果 China 若是获取的类里没有这个属性 则在字符串后加个 None 不然的话会报错 x=getattr(People,'country1',None)
print(x) #、setarr 通过这个函数来设置属性 添加属性 setattr(People,'x',)
print(People.x)
#打印结果为 #、delattr 用来删除对象的属性
delattr(People,"country")
print(People.__dict__) #{'__module__': '__main__', '__init__': <function People.__init__ at 0x00000138FC835048>, 'tell': <function People.tell at 0x00000138FC8350D0>, '__dict__': <attribute '__dict__' of 'People' objects>, '__weakref__': <attribute '__weakref__' of 'People' objects>, '__doc__': None}
在来看 country 这个属性已经删掉了
__str__ 方法:如果要把一个类的实例 变成str,就需要实现特殊方法__str__(),下面说 怎么用:
我想要拿到egon的个人信息 姓名年龄以及性别 要是按照如下就很难拿到 class People:
def __init__(self,name,age,sex):
self.name =name
self.age=age
self.sex=sex obj=People('egon',,'male')
print(obj) #打印结果
<__main__.People object at 0x0000021FCE461B00> 要是拿到信息 就地像以下方法拿到
print(obj.name)
print(obj.age)
print(obj.sex)
#打印结果
egon male
这样就感觉比较复杂 可以在类内部添加一个__str__ 函数 试试呢 class People:
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',,'male')
print(obj)
#打印结果
名字:egon,年龄:,性别:male
__del__方法 删除
当对象在内存中被释放时, 自动触发执行
如果产生的对象仅仅只是在python程序级别的(用户级), 那么无需定义__del__,如果产生的对象的同时 还会像操作系统发起系统调用,即一个对象有用户级与内核级两种资源, 比如(打开一个文件, 创建一个数据库连接,)则必须在清楚对象的同时 回收系统资源 这就用到了__del__.
class Foo:
def __del__(self):
print('执行我了’) f1=Foo()
del f1
print('------->') #输出结果
执行我了
------->
元类:元类就是帮你创建类的‘家伙‘,在python中, 类也是对象,这样的对象就是通过袁磊创建的, 元类就是‘类的类’。之前提到的type实际上就是元类, 在python中所有的类都是用type创建的。到此我们也能够立即为什么说在python中一切皆对象了吧,int,string,function,以及class
所有的多少对象 ,他们都能够从一个类中创建。
、用内置的元类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',,'male')
print(p.name,p.age,p.sex)
__call__: 调用对象 会自动触发对象下的绑定方法__call__的执行,
然后将对象本身当做第一个参数传给self,将调用对象时 括号内的值传给*args,**kwargs
def __call__(self,*args,**kwargs):
print('__call__'args,kwargs)
python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类的更多相关文章
- Python补充--Python内置函数清单
Python内置函数 Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print(&quo ...
- 学习过程中遇到的python内置函数,后续遇到会继续补充进去
1.python内置函数isinstance(数字,数字类型),判断一个数字的数字类型(int,float,comple).是,返回True,否,返回False2.python内置函数id()可以查看 ...
- python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序
exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...
- python 内置函数补充 or 递归 or 二分法
一.内置函数的补充 repr() 显示出字符串的官方表示形式 chr() print(chr(20013)) # 把数字编码转换成字符串 ord() print(ord('中')) # 20013 把 ...
- python内置函数与匿名函数
内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() d ...
- Python 内置函数笔记
其中有几个方法没怎么用过, 所以没整理到 Python内置函数 abs(a) 返回a的绝对值.该参数可以是整数或浮点数.如果参数是一个复数,则返回其大小 all(a) 如果元组.列表里面的所有元素都非 ...
- python内置函数大全(分类)
python内置函数大全 python内建函数 最近一直在看python的document,打算在基础方面重点看一下python的keyword.Build-in Function.Build-in ...
- python内置函数详细介绍
知识内容: 1.python内置函数简介 2.python内置函数详细介绍 一.python内置函数简介 python中有很多内置函数,实现了一些基本功能,内置函数的官方介绍文档: https: ...
- lambda 表达式+python内置函数
#函数 def f1(a,b): retrun a+b #lambda方式,形参(a,b):返回值(a+b) f2=lambda a,b : a+b 在一些比较简单的过程计算就可以用lambda p ...
随机推荐
- 斯坦福公开课:Developing IOS 8 App with Swift(1-3)心得体会
最近开始学习Swift开发移动程序.跟随斯坦福大学的公开课进行自学. 这真是一个美好的时代,虽然不能在斯坦福求学,但是可以观看录制的授课录像.讲义,好似老师在给我们上课一样! 心得: 1.每节课信息量 ...
- ecshop 国付宝支付接口
function get_code($order, $payment){ $version = '2.2'; $charset = '1'; $language = '1'; $signType = ...
- 【百度之星初赛A】路径交 LCA+线段树
[百度之星初赛A]路径交 Problem Description 给定一棵n个点的树,以及m条路径,每次询问第L条到第R条路径的交集部分的长度(如果一条边同时出现在2条路径上,那么它属于路径的交集). ...
- EasyRTMP实现Demux解析MP4文件进行rtmp推送实现RTMP直播功能
本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52965101 前面已经介绍过EasyRTMP,这里不 ...
- 远程访问Linux的常见方式
访问方式 不加密文字界面:telnet.rsh 加密文字界面:SSH 图形界面:Xdmcp.RDP.VNC SSH SSH用来取代finger.R shell(rlogin.rcp.rsh).teln ...
- 指定查询条件,查询对应的集合List(单表)
TestDao.java(测试类) @Test public void findCollectionByConditionNoPage(){ ApplicationContext ac = new ...
- vsftp登录时间太长的解决办法
与ssh一样,vsftp的配置文件默认开启了DNS反向解析,这可能会造成用户在登陆到FTP服务器的时候奇慢无比,只要在配置文件中禁用DNS反向解析即可解决文件. 编辑/etc/vsftpd/vsftp ...
- java之EJB
EjB,只是一个服务端运行组件,公开接口供客户端以C/S方式调用而已. 最直白,最本质的解释,可参见: http://blog.csdn.net/jojo52013145/article/detail ...
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade —— 贪心 + 字符串处理
题目链接:http://codeforces.com/problemset/problem/719/C C. Efim and Strange Grade time limit per test 1 ...
- 侧方位停车想一次过,掌握边线30cm很重要!
侧方位停车要想一次过关,关键在于保持车身距离库边线30cm左右的距离.但是,往往有很多学员掌控不好这个距离,导致倒库时压线.那么,如何找准这个30cm呢?下面,小编就来教大家方法,赶紧学习吧! 侧方位 ...