内置函数表: https://www.cnblogs.com/xiao1/p/5856890.html
issubclass() 与 isinstance()
内置函数issubclass()用于判断类对象与类对象之间的关系
内置函数isinstance()用于判断实例对象与类对象之间的关系
内置函数issubclass()接收两个实参
第一个实参是类对象
第二个实参是类对象或有类对象组成的元组
当第二个实参是类对象时,如果第一个实参是第二个实参的子类,那么返回True
当第二个实参是类对象组成的元祖时,如果第一个实参是第二个实参中任意一个类对象的子类,返回True
当第二个实参是类对象时,如果第一个实参是第二个实参的实例对象,或者第一个实参是第二个实参的子类的实例对象,那么返回True
>>> class A(object):
pass
>>> class B(object):
pass
>>> class C(object):
pass
>>> class D(A):
pass
>>> issubclass(D, A)
> True
>>> isinstance(D, B)
> False
>>> isinstance(D, (B, C, A))
> True
>>> issubclass(bool, int)
> True
>>> issbuclass(bool, str)
> False
内置函数is instance()接收两个实参
第一个实参是实例对象,
第二个实参是类对象或由类对象组成的元组。
当第二个实参是类对象时,如果第一个实参是第二个实参的实例对象,或者第一个实参 是第二个实参的子类的实例对象,那么返回True。
当第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意- -个类对象或其子类的实例对象,那么返回True。
>>> class A(object):
pass
>>> class B(object):
pass
>>> class C(object):
pass
>>> class D(A):
pass
>>> isinstance(D(), D)
> True
>>> isinstance(D(), A)
> True
>>> isinstance(D(), (B, C, A))
> True
type()
内置函数type()用于获得指定对象的类型
实例对象的类型是其对应的类对象,类自己的类型就是type
可以使用==判断某个对象的类型是否是指定的类型
对于基本数据类型,可以直接使用其对应的类名;如果不是基本数据类型,需要使用标准库中的模块types中定义的变量。
>>> type(18)
>int
# 类的类型
>>> class MyClass(object):
pass
>>> type (MyClass)
> type
>>> type(int)
> type
# 自定义函数类型
>>> def do_sth():
pass
>>> type(do_sth)
> function
# 内置函数类型
>>> type(dir)
> builtin_function_or_method
# 自定义函数不是基本数据类型,不能使用==直接判断,会报错
>>> type(do_sth) == function
> NameError: name 'function' is not defined
dir()
对于制定的类对象或实例对象,可以调用内置函数dir获得其可以访问的类型和方法(包括从父类中继承的属性和方法)
类对象与实例对象的结果是有区别的,类对象的结果中不包含实例属性。
调用内置函数dir()后的返回值中,很多属性和方法都是以下划线__开头和结尾的,这些属性和方法中绝大多数都继承自类object。
以双下划线__开头和结尾的属性称为特殊属性,以双下划线__开头和结尾的方法称为特殊方法。
特殊属性和特殊方法都是系统预定义的,我们自定义的属性名和方法名不要以双下划线__开头和结尾。
在我们自定义类对象时,经常会重写一一个或多个特殊方法,例如_ init_ 。 特殊方法会在特定的情形下被自动调用,很少需要手动调用特殊方法。
属性之增删改查
- hasattr(object, name )
用于判断指定的対象object是否有参数name指定的属性或方法。 - getattr(object, name[, default])
用于荻取指定的対象obj ect中名刃name的属性或方法。
如果不指定参数default,那幺当obj ect中不存在名カname的属性或方法吋,抛出AttributeError.如果指定了参数default,那幺当object中不存在名カname的属性或方法吋,就会返回default。getattr(object, name)等价于: object. name. - setattr(object, name , value )
用于在指定的対象obj ect中添加或修改名内参数name的属性或方法,添加或修改后的値カvalue。setattr(object,_ name,_ value)等价于: object.name_ = value. - delattr(object, name)
用于刪除指定的対象object中名カ参数name的属性或方法。delattr(object, name) 等价于: del object. name。
注意:只有在不知道対象信息的情况下,オ会去荻取対象的信息。因此,如果可以直接写: object. name,就不要写カgetattr(object , name’ )。
算术运算符重载
标准算术运算符在默认情况下不能用于自定义类对象的实例对象。
如果想让标准算术运算符可以用于自定义类对象的实例对象
必须在自定义类对象中实现标准算术运算符 对应的一下特殊方法:
- +对应的特殊方法是_ add_ ( )和_ radd__ ();
- -对应的特殊方法是_ sub__ ()和__ rsub__ ( ) ;
- *对应的特殊方法是__ mul__ ()和__ .rmul__ ();
- /对应的特殊方法是_ truediv__ ( )和__ rtruediv__ ( );
- //对应的特殊方法是_ floordiv__ ()和__ rfLoordiv_ ( )。
假设两个运算数obj1和obj2,以+为例,对于obj1 + obj2, 需要在obj 1对应的自定义类对象中实现特殊方法. add_ (), 或在obj2对应的自定义类对象中实现特殊方法__ radd__ () (radd中的r是right的缩写,因为obj 2位于运算符+的右边,所以实现的特殊方法是__ radd__ ( );因为obj1位于运算符+的左边,所以实现的特殊方法是_ add_ ()) 。
__ str __() 与 __ repr __()
类对象的特殊方法值__str__() 与 __ repr __()用于自定义并返回实例对象的字符串表示形式。
1.当在交互式命令行中直接打印一一个实例对象时,如果在实例对象对应的类对象中实现了特殊方法_ repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
2.当调用内置函数print打印一个实例对象时,如果在实例对象对应的类对象中实现了特殊方法__ str__ (), 会自动调用该方法;
否则,如果在实例对象对应的类对象中实现了特殊方法repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
3.当调用内置函数str创建字符串并且实参是一个实例对象时,如果在实例对象对应的类对象中实现了特殊方法_ str__ (), 在内置函数str的内部会自动调用该方法; 否则,如果在实例对象对应的类对象中实现了特殊方法repr__ (), 在内置函数st r的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
4.当调用内置函数repr创建字符串并且实参是一一个实例对象时,如果在实例对象对应的类对象中实现了特殊方法__ repr__ (), 在内置函数repr的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
通常情况下,类对象的特殊方法_ str__ ()和_ repr. 、 截图时隐藏当前窗口 现代码是一样的,因此,当实现了其中-个后,可以把其方法名赋值给另一个的方法名。
>>> class MyClass (object) :
>>> def__ str__ (self) :
>>> return”这是实例对象的字符串表示形式”
>>> __repr__=__ str__
内置函数str( )和repr( )都返回对象的字符串表示,其区别在于:
str()的返回值是给用户看的,更加用户友好;
repr()的返回值是给程序开发者看的,是为调试服务的。