面向对象编程
issubclass()与 isinstance()
issubclass()
内置函数issubclass()用于判断类对象与类对象之间的关系
内置函数isinstance()用于判断实例对象与类对象之间的关系
内置函数issubclass接受两个实参,
第一个实参是类对象,
第二个实参是类对象或由类对象组成的元组。
当第二个实参是类对象时,如果第一个实参是第二个实参的子类,那么返回true。
当第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意一个类对象的子类,返回true。
isinstance()
内置函数isinstance接受两个实参:
- 第一个实参是类对象,
- 第二个实参是类对象或由类对象组成的元组。
当第二个实参是类对象时,如果第一个实参是第二个实参的子类,那么返回true。 当第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意一个类对象的子类,返回true。
type()与 dir()
type()
- 内置函数type()用于获得指定对象的类型。
- 实例对象的类型是对应的类对象。
类对象的类型是type,也就是说,类对象是type的一个实例对象。
- 查看类型
- 自定义函数对象的类型是function。
- 内置函数对象的类型是builtin_function_or_method。
- 可以使用运算符==判断某个对象的类型是否是指定的类型。
- 对于基本数据类型,可以直接使用其对应的类名;
- 如果不是基本数据类型,需要使用标准库中的模块types中定义的变量。
dir()
- 对于制定的类对象或实例对象,可以调用内置函数dir()获得其所有可以访问的属性和方法(包括从父类中继承的属性和方法)的列表。
- 类对象与实例对象的结果是有区别的,类对象的结果不包括实例属性。
可以看到这里多了一个‘ia’
属性之增删改查
- hasattr(object, name ) 用于判断指定的对象object是否有参数name指定的属性或方法。
- getattr(object, name[, default1]) 用于获取指定的对象object中名为name的属性或方法。
如果不指定参数default,那么当object中不存在名为name的性或方法时,抛出AttributeError;
如果指定了参数default,那么当object中不存在名为name的属性或方法时,就会返回default.getattr(object, name),等价于: object.name; - setattrfabject, name, value) 用于在指定的对象object中添加或修改名为参数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()
- x对应的特殊方法是mul()与rmul()
- /对应的特殊方法是truediv()和rtruediv()
- //对应的特殊方法是floordiv()和rfloordiv()
__ str__( )与__repr__()
类对象的特殊方法之__ str__()与__repr__()用于自定义并返回实例对象的字符串表示形式。
- 类对象的特殊方法之__ str__ ()和_ repr__ () 用于自定义并返回实例对象的字符串表示形式。
- 当在交互式命令行中直接打印一个实例对象时
如果在实例对象对应的类对象中实现了特殊方法__ repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。 - 当调用内置函数print打印-一个实例对象时
如果在实例对象对应的类对象中实现了特殊方法__ str__ (), 会自动调用该方法;
否则,如果在实例对象对应的类对象中实现了特殊方法__ repr__ (), 会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。 - 当调用内置函数str创建字符串并且实参是一个实例对象时
如果在实例对象对应的类对象中实现了特殊方法__ str__ (), 在内置函数st r的内部会自动调用该方法;
否则,如果在实例对象对应的类对象中实现了特殊方法_ repr__ (), 在内置函数str的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。 - 当调用内置函数repr创建字符串并且实参是一个实例对象时
如果在实例对象对应的类对象中实现了特殊方法__ repr__ (), 在内置函数repr的内部会自动调用该方法;否则,会打印实例对象对应的类对象和实例对象在内存中的地址。