23 面向对象
      -----特殊方法
1. isinstance(obj,类名)     判断对象是否是此类实例化或者此类的子类实例化出来的
class A:pass
class B(A):pass
b1=B()
print(isinstance(b1,B)) # True
print(isinstance(b1,A)) # True
2.issubclass(类名,类名1) 判断类名是否是类名1的子类
class A:pass
class B(A):pass
print(issubclass(B,A)) #True
print(issubclass(A,B)) #False
3.__len__用法
class C:
def __init__(self):
self.a=1
self.b=2
def __len__(self):
return len(self.__dict__)
c1=C()
print(len(c1))
4.__hash__用法
class C:
def __init__(self):
self.a=1
self.b=2
def __hash__(self):
return hash(str(self.a)+str(self.b))
c1=C()
print(hash(c1))
5.__str__用法 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
class B:
def __init__(self,name,age):
self.name=name
self.age=age
def __repr__(self):
return "太白"
b2=B("alex1",1000)
print(b2)
print("%s"% b2) 6.__repr__用法 如果一个类中定义了__repr__方法,那么在repr(对象) 时,默认输出该方法的返回值
class B:
def __init__(self,name,age):
self.name=name
self.age=age
def __repr__(self):
print("666")
return "太白"
b1=B("alex",1000)
print(repr(b1)) # 方法一
print("%r"% b1) # 方法二
#补充知识:格式化输出
# %s 数字和字符串 %r +"" repr 原形毕露 %d 数字 %f 小数
7.__call__用法 构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,
即:对象() 或者 类()()
class Foo:
def __init__(self):
pass
def __call__(self,*args,**kwargs):
print(args,kwargs)
a1=Foo()
a1("alex",a=666) #('alex',) {'a': 666} 8.__eq__用法 对一个类实例化的两个对象进行比较运算的时候自动触发.
class A:
def __init__(self,):
self.a=1
self.b=2
def __eq__(self,obj): # 需要手动传一个参数
if self.a==obj.a and self.b==obj.b:
return True
a1=A()
b1=A()
print(a1==b1)
9.__del__用法 析构方法
#python垃圾回收机制:
#文件中你创建的所有的变量,类等等,执行过程中将所有变量,类做个标记,执行完之后,在一段时间之内,没有被调用,则会自动回收.
class A:
def __del__(self):
print("666")
a1=A()
a1.__del__ 10.__new__用法
class A:
def __init__(self):
self.x=1
print("in init function") # 第五步
def __new__(cls,*args,**kwargs): # 第二步 自动执行__new__方法
print(cls) # 第三步<class '__main__.A'>
print("in new function") # 第四步 return super().__new__(cls) # 返回一个对象空间
return object.__new__(cls) 第二种方法
a1=A() # 第一步 类名加括号
11.设计模式:
单例模式: 对一个类只能实例化一个对象.最简单的设计模式, (面试必考)
class A:
__instance=None
def __new__(cls, *argsm, **kwargs):
if A.__instance is None:
obj=object.__new__(cls)
A.__instance=obj
return A.__instance
a1=A()
b1=A()
c1=A()
print(a1,b1,c1)
12.item 用法
class Foo:
def __init__(self,name):
self.name=name
def __getitem__(self,item):
if hasattr(self,item):
return getattr(self,item)
else:
print("没有此变量")
def __setitem__(self,key,value):
print(key,value)
def __delitem__(self,key):
print(key) f1=Foo("alex")
print(f1["name"])
f1["name"]="mary"
del f1["name"] 补充知识点:
 python3.6版本以上,运行以上代码。字符串格式化的另一种写法。
a = '123'
b = f"6666{a}"
												

最新文章

  1. Ubuntu(Linux系统)虚拟机工具vmtools详细说明
  2. 【与软件无关】2013赤峰地区C1科目三考试攻略【绝对原创】
  3. 使用IPostBackEventHandler让JavaScript“调用”回传事件
  4. 用thinkphp写的一个例子:抓取网站的内容并且保存到本地
  5. [转载]ExtJs4 笔记(5) Ext.Button 按钮
  6. php抓取页面的几种方式
  7. Linux内存管理原理【转】
  8. codeforces 434A A. Ryouko&#39;s Memory Note(数学)
  9. bzoj 3171 [Tjoi2013]循环格(MCMF)
  10. karma、jasmine做angularjs单元测试
  11. req.xhr在express中的应用
  12. 微信公众平台PHP开发
  13. inception cenOS 安装
  14. 调试JDK源码时,不能查看变量的值
  15. JAVA 探究NIO
  16. 用java打印图形
  17. python——字符串格式化
  18. JavaScript中遍历数组和对象的方法
  19. BZOJ.3545.[ONTAK2010]Peaks(线段树合并)
  20. HDOJ 2002 计算球体积

热门文章

  1. SSE图像算法优化系列六:OpenCv关于灰度积分图的SSE代码学习和改进。
  2. Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE
  3. GIT里的一些名词
  4. Easyui中 alert 带回调函数的 消息框
  5. Java的隐秘之JavaCC
  6. Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 v4
  7. 【原创 Hadoop&amp;Spark 动手实践 13】Spark综合案例:简易电影推荐系统
  8. 前后端分离springmvc和RESTful理解
  9. gsoap入门:C/C++代码生成及编译--包含soapcpp2 -qname添加命名空间后报错的解决方法--可用
  10. AI人工智能顶级实战工程师 课程大纲