- 1.__new__(cls, *args, **kwargs) 创建对象时调用,是一个静态方法,返回当前对象的一个实例; 注意:这里的第一个参数是cls即class本身
- 2.__init__(self, *args, **kwargs) 创建完对象后调用,对当前对象的实例的一些初始化,无返回值,即在调用__new__之后,根据返回的实例初始化;注意,这里的第一个参数是self即对象本身【注意和new的区别】
- 3.__call__(self, *args, **kwargs) 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符, 对象可call,注意不是类,是对象
先有创建,才有初始化。即先__new__,而后__init__。
关于__call__
方法,先提到一个概念,叫可调动对象,平时定义的函数,内置函数和类都属于可调用对象,如果类中实现了__call__
方法,那实例对象将成为一个可调用对象。
_xxx 不能用'from module import *'导入
__xxx__ 系统定义名字
__xxx 类中的私有变量名
"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据;
静态方法
静态方法是定义在类名称空间的一个函数,定义形式是在def行前加修饰符@staticmethod 静态方法的参数可以是任意参数,不需要self参数 可以通过类名或者值为实例对象的变量,以属性的方式调用静态方法
类方法
类方法定义形式是在def行前加修饰符@classmethod,这种方法必须有一个表示其调用类的参数,一般用cls作 为参数名,也可以有多个其他的参数 类方法也是类对象的属性,可以以属性访问的形式调用 调用它的类将自动约束到方法的cls参数,可以通过这个参数访问该类的其他属性
1.格式
isinstance(object,type-or-tuple-or-class) -> bool
2.作用
判断一个对象是某个类或子类的实例。
3.参数介绍
第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表((int,list,float)是一个列表)。其返回值为布尔型(True or flase)。
具体的:
(1)当第二个参数是type-or-tuple时
若第二个参数只有一个单独的类型,对象的类型与参数二的类型相同则返回True;
若第二个参数为一个元组类型,则若对象类型与元组中类型名之一相同即返回True。
# coding=UTF-8 >>> a = 4 >>> isinstance (a,int) True >>> isinstance (a,str) False >>> isinstance (a,(str,int,list))#与元组类型之一相同 True >>> isinstance(a,(str,list,float))#与元组类型都不相同 False
(2)当第二个参数是class时
# coding=UTF-8 class A(object): pass >>>a=A() >>>isinstance(a,A) True
1.格式
type(object)--类型
2.作用
得到传入的object的类型
三.比较
1.共同点
type和isinstance都可以判断变量是否属于某个内建类型
2.不同点
(1)type只接收一个参数,不但可以判断变量是否属于某个类型,而且可以得到参数变量未知的所属的类型;而isinstance只能判断是否属于某个已知类型,不能直接得到变量未知的所属的类型
# coding=UTF-8 class A(object): pass >>>a=A() #type判断变量是否属于某个类型 >>>type(a)==A True #type得到变量类型 >>>type(a) __main__.A #isinstance只能判断变量是否属于某个类型 >>>isinstance(a,A) True
(2)isinstance可以判断子类实例对象是属于父类的;而type会判断子类实例对象和父类类型不一样
# coding=UTF-8 class father(object): pass class son(father): pass >>>a=father() >>>b=son() >>>isinstance(a,father) True >>>type(a)==father True >>>isinstance(b,father)#isinstance得到子类实例是属于父类的 True >>>type(b)==father#type对于子类实例判断不属于父类 False
综上所述,isinstance和type的应用场景是不同的:
type主要用于获取未知变量的类型
isinstance主要用于判断A类是否继承于B类