标签:垃圾回收 子类 编程 命名 面向对象 示例 一个 __new__ 实例化
判断一个对象是否是已知的类型,类似type()
如果对象的类型与classinfo相同,返回bool值True,否则返回False
如果要判断两个类型是否相同的时候尽量用isinstance()
示例1:
a = [1,2,3] print(isinstance(a,list))
输出: True
示例2:
class A(object):pass class B(A):pass b=A() print(isinstance(b,A)) # 返回True b 是 A 的对象 print(type(b) is B) # 返回False b不是B类的对象 print(type(b) is A) #type 在这里是检测对象是不是类的对象/实例
判断两个类是否有继承关系,,如果真的有继承关系,那就返回bool值True/False
class A(object):pass class B(A):pass print(issubclass(B,A)) # True B类是A类的子类 print(issubclass(A,B)) # False
内置方法也叫双下方法,魔术方法,它们在python中处处皆是,它们是一些可以让你对类添加"魔法"的特殊方法,经常都是双下划线包围来命名的比如(__init__,__str__)等等,到现在还是没有很好的办法来解释它们.
一定有某一个语法或者一种写法自动触发这个方法.
最常见的__init__ 是个初始化方法,类的初始化方法, 然而当我们执行 a =class()的时候,__init__并不是 第一个被调用的方法,事实上__new__第一个被调用,这个方法才真正的创建了实例/对象,当这个对象生命周期结束的时候,这时候__del__方法会被调用.看到这样的联系,让我们进一步了解他们的特性!
首先说说设计模式中的单例模式, __new__是对象实例化的时候第一个被调用的方法,它只取cls也就是类的参数,把其他参数传给__init__..
单例模式示例1
class Teacher2: flag = None #静态属性为空 def __new__(cls, *args, **kwargs): if cls.flag is None: #执行判断 cls.flag 也就是Teacher2类的静态属性为空的情况下 cls.flag = object.__new__(cls) #这句话直走一次 #Teacher2继承的父类 object.__new__(cls)开辟/构建的空间地址赋予Teacher2类的静态属性 print(cls.flag) return cls.flag #类的静态属性得到的空间地址赋值Sheldon2 Sheldon2 = Teacher2() ssa = Teacher2() #当ssa执行实例化的时候,flag 已经不等于None,而等于一个空间地址, 不走if判断,直接把原先的空间地址赋值给ssa
单例模式示例2
class Teacher: flag = None def __new__(cls,*args,**kwargs): # if cls.flag is None: cls.flag = object.__new__(cls) return cls.flag def __init__(self,name): self.name = name Sheldon = Teacher(‘Sheldon‘) Penny = Teacher(‘Penny‘) print(‘Sheldon.name‘) #输出 Sheldon print(‘Penny.name‘) #输出 Penny print(‘Sheldon.name‘) ##输出 Penny
它获取任何传给构造器的参数,(例如Sheldon = Teacher(‘Sheldon‘) __init__ 就会接收到参数Sheldon. __init__在python类的定义中用的最多
__del__ 是对象的销毁器,它并不是实现了语句中 del Sheldon 因此它并不等于 Sheldon.__del__(), 而是定义了对象的垃圾回收时的行为,当对象需要销毁时做的一些处理的时候,这个方法会用到,
class Teacher: def __init__(self,name): self.name = name def __del__(self): print(‘执行删除动作‘) Sheldon = Teacher(‘Sheldon‘) print(‘11111‘) # 输出顺序 11111 ---> 执行删除动作 ---> 删除Sheldon del Sheldon # 执行del 对象的时候触发了__del__ ,在真正删除Sheldon对象前,执行方法__del__ # 如果我们不删除 Sheldon ,那么程序的执行过程中或最后,垃圾回收机制会替你执行del Sheldon # del Sheldon ---> 执行__del--->删除Sheldon
...
标签:垃圾回收 子类 编程 命名 面向对象 示例 一个 __new__ 实例化
原文地址:https://www.cnblogs.com/CrazySheldon1/p/10029886.html