内置函数issubclass()用于判断类对象与类对象之间的关系
接受两个参数: 第一个实参是类对象; 第二个实参是类对象或由类对象组成的元组。
第二个参数是类对象时,如果第一个实参是第二个实参的子类,那么返回True. 第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意一个类对象的子类,那么返回True.
print(issubclass(bool,int)) True
print(issubclass(bool,(str,int,dict))) True
内置函数isinstane()用于判断实例对象与类对象之间的关系
接受两个实参: 第一个实参是实例对象对象; 第二个实参是类对象或由类对象组成的元组。
第二个实参是类对象时,如果第一个实参是第二个实参的实例对象,或者第一个实参是第二个实参的子类的实例对象,那么返回True
type() 实例对象的类型是其对应的类对象
class Myclas(object): pass mc = MyClass()
print(type(mc)) <class’main.MyClass’>
print(type(MyClass)) <class’type’>
def do_sth(): pass
print(type(do_sth)) <class’function’>
print(type(dir)) <class’builtin_function_or_method’>
print(type(dir())) <class’list’>
可以使用运算符==判断某个对象的类型是否是指定类型。 只适用于基本数据类型。
import types print(type(do_sth) == types.FunctionType) print(type(print) == types.BuiltinFunctionType) True True
dir() 类对象的结果中不包含实例属性 class MyClass(object): ca = ‘ca’
def init(self): self.q dir( )
调用内置函数dir( )后的返回值中,很多属性和方法都是以双下划线_开头和结尾的, 这些属性和方法中的绝大多数都继承自类object. 以双下划线__开头和结尾的属性被称为特殊属性, 以双下划线_开头和结尾的方法被称为特殊方法。特殊属性和特殊方法都是系统预定义的,我们自定义的属性名和方法名不要以双下划线_开头和结尾。在我们自定义类对象时,经常会重写一个或多个特殊方法,例如_ init_. 特殊方法会在特定的情形 下被自动调用,很少需要手动调用特殊方法。
print (dir (object)) [,- lass’,’- delattr.’,’- dir’.’- .doe,-’:’. ea,’:’- format_’’, 8e_’,’- getattribute.’’,’ - gt hash_’ _ new_,’reduce_ ”, ’ _ reduc, e ex’,’_ repr_’,’_ setattr_ ’,’sizeof_ ’,’str_ ’。’subclasshook_]
标准算术运算符在默认情况下不能用于自定义类对象的实例对象。
class MyClass1 (object): pass
class MyClass2(object): pass print (MyClass1( + MyClass20)
报错
如果想让标准算术运算符可以用于自定义类对象的实例对象, 必须在自定义类对象中实现标准算术运算符对应的以下特殊方法:
1 + 对应的特殊方法是__ add___ ()和_ radd__ ( ) ; 2. - 对应的特殊方法是__ sub_ ()和__ .rsub__ ( ); 3. * 对应的特殊方法是__ mul_ ()和_ rmul_ ( ); 4. /对应的特殊方法是_ .truediv_ ()和_ rtruediv_ .(); 5. //对应的特殊方法是_ fLoordiv_ .()和_ rfloordiv_ ()。
类对象的特殊方法之_ str_ ()和_ repr_ ()用于自定 义并返回实例对象的字符串表示形式。
1 当在交互式命令行中直接打印- -个实例对象时, 如果在实例对象对应的类对象中实现了特殊方法_ repr_ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
2.当调用内置函数print打印-个实例对象时, 如果在实例对象对应的类对象中实现了特殊方法_ str_ .(), 会自动调用该方法; 否则,如果在实例对象对应的类对象中实现了特殊方法_ repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
3.当调用内置函数str创建字符串并且实参是一-个实例对象时, 如果在实例对象对应的类对象中实现了特殊方法str_ (), 在内置函数str的内部会自动调用该方法;否则,如果在实例对象对应的类对象中实现了特殊方法repr_ (), 在内置函数str的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
4.当调用内置函数repr创建字符串并且实参是一一个实例对象时, 如果在实例对象对应的类对象中实现了特殊方法repr_ (), 在内置函数repr的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。
通常情况下,类对象的特殊方法str_ .()和_ repr_ ()的实现代码是- 样的,因此,当实现了其中-一个后,可以把其方法名赋值给另-一个的方法名。
class MyClass (object): def_ str_ (self): return”这是实例对象的字符串表示形式”
内置函数str()和repr()都返回对象的字符串表示,其区别在于: str()的返回值是给用户看的,更加用户友好; repr()的返回值是给程序开发者看的,是为调试服务的。
str(“He1lo, \nworld!”) ’Hello, \nworld!’ repr(“Hello, \nworld!”) ”Hello, \nworld!’”