一 两个内置函数
issubclass(子类,父类) #判断两个类是否是继承关系 ,返回True或False
isinstance(对象,类) # 判断 对象是不是 类 这类事物,这个东西换可以判断某个东西是不是某个类及其父类的对象
type # 也可以判断某个东西是不是某个类及其父类的对象,但是这个只能判断一层,
简单例子:
class A(object):pass class B(A):pass b=B() print(isinstance(b,A)) # True print(type(b)is B) #True print(type(b)is A) #False
二 简单回顾反射
class A:
# def __init__(self,name,age):
# self.name=name
# self.age=age
# a=A('张三',90)
# ret=input('>>>')
# if hasattr(a,ret):
# print( getattr(a,ret)) # 把某个对象的某个属性或方法直接拿出来
三 一些 内置方法: (上下划方法,魔术方法)
内置方法的特点, 一定有某一个语法或者写法自动触发这个方法
一些重点的:
1.单例模式:(构造方法) __new__
顾明思议 (只能实例化一个对象)
例子:
class Teacher(object): flag=None def __new__(cls, *args, **kwargs): # __new__本身不会自己创建 if cls.flag is None:# 为什么此处是cls而不是self 因为self就是__new__创建出来的所以在这换没有self,所以只能用类本身(Teacher) cls.flag=object.__new__(cls) # 所以他得调用父类的方法来帮他创建对象空间 return cls.flag # 此时就是一个对象的空间(地址) def __init__(self): print(self) # <__main__.Teacher object at 0x0000018911A07550> a=Teacher() # print(a) # <__main__.Teacher object at 0x0000018911A07550> # 得出结论: __new__返回的结果就是将来为你这个对象实例化后的地址,所以 他是在你__init__执行之前所自动触发的 # 这个方法,意思是 先有__new__再执行__init__
2 析构方法;(对象删除之前的收尾工作)
class Teacher: def __init__(self,name): self.name=name def __del__(self): print('我还在') a=Teacher('张三') del a # 也就是说在执行这个del 删除方法之前他会先走__del__方法然后在删除,如果我们自己不删除a程序在执行过程中或最后,垃圾回收机制会替你执行del a print(a)
3 __call__ (他可以让你的方法直接用对象加括号调用)
class St(): def __init__(self): pass def __call__(self, *args, **kwargs): print('调用我了') a=St() a() # 对象加括号就可以调用他 调用我了 结论: 这是内置的 一般我们都是对象名点方法调用某个方法的 知道就行了
4 __str__ 让一个对象显示更清晰
class Course: def __init__(self,name,price,period,teacher): self.name = name self.price = price self.period = period self.teacher = teacher # def cs(self): # return self.name,self.price # print( self.name,self.price) def __str__(self): # 必须有返回值,必须返回一个str类型 # 高级点 return '%s,%s,%s,%s'%(self.name,self.price,self.period,self.teacher) # 这么写直接打印对象就能输出出来 course_lst = [] python = Course('python',19800,'6 months','baoyuan') linux = Course('linux',16800,'5 months','oldboy') course_lst.append(python) course_lst.append(linux) # print(python) # print(str(python)) # print('课程展示 : %s'%python) # for i in course_lst: # print(i.cs()) # i.cs() print(python) # python,19800,6 months,baoyuan print(linux) # linux,16800,5 months,oldboy