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)

最新文章

  1. 「译」JUnit 5 系列:架构体系
  2. python 相关安装和配置
  3. ffmpeg编译x264, 这个libffmpeg即可解码又可以h264编码
  4. [Effective Java]第八章 通用程序设计
  5. mysql概要(十)触发器
  6. java_字符
  7. 如何使用 RDP 或 SSH 连接到 Azure 虚拟机
  8. ntpath join(path, *paths) 发生UnicodeDecodeError的Bug的解决方案
  9. 杂题 UVAoj 107 The Cat in the Hat
  10. MySQL 缓存 Query Cache
  11. Kali linux安装漏洞扫描工具Nessus指南
  12. docker dead but pid file exists
  13. mysql 学习心得1
  14. spring-boot-oracle spring-batch
  15. 在phpstudy中安装并使用ThinkPHP 5
  16. 《C#并发编程经典实例》学习笔记-关于并发编程的几个误解
  17. Golang开发工具LiteIDE使用方法整理
  18. java正则表达式appendReplacement和appendTail方法
  19. 从Silverlight到ExtJS再到BootStrap,DataTable(DataGrid)的样式格式化原理没变
  20. c++保存数据到TXT

热门文章

  1. 数据库MySQL经典面试题之SQL语句
  2. Spring LDAP
  3. HDU 5336 XYZ and Drops 2015 Multi-University Training Contest 4 1010
  4. hdu 1413 文件系统
  5. Xcode5.1.1+ios 7.1.2 免证书真机调试
  6. 简单label控件 自制
  7. Android笔记之Snackbar的基本使用
  8. 解决表单GET提交后台数据乱码问题
  9. ckeditor html标签的class 等attribute属性都被屏蔽啦,替换成空的解决方案
  10. SpringBoot-(1)-IDEA创建SpringBoot项目并运行访问接口