在Python当中,如果一个类没有继承任何类,那么这个类默认继承的就是object类,所以
- object类是所有类的直接或间接父类
- 所有类都拥有object类的属性和方法
object类中特殊的方法 | 功能描述 |
__new__() | 有系统调用,用于创建对象 |
__init__() | 创建对象是手动调用,用于初始化对象的属性值 |
__str__() | 对象的描述,返回值是str类型,默认输出对象的内存地址。 |
使用 dir() 查看对象的所有属性
class Person(object):#创建类
def __init__(self,name,age):#初始化方法
self.name = name#实例属性赋值
self.age = age
def show(self):#创建函数
print(f'大家好,我叫{self.name},我今年{self.age}岁了')
#创建Person类的对象
per=Person('Sam','15')#创建对象的时候会自动调用__init__方法
print(dir(per))#使用dir查看Person类对象per所具有的属性
红色框框里面的是我们自己定义的属性和方法,没有框起来的是来自继承父类 object 的属性或方法
特殊方法
运算符 | 特殊方法 | 功能描述 |
+ | __add__() | 执行加法运算 |
- | __sub__() | 执行减法运算 |
< , <= , == | __lt__() , __le__() , __eq__() | 执行比较运算 |
> , >= , != | __gt__() , __ge__() , __ne__() | 执行比较运算 |
* , / | __mul__() , __truediv__() | 执行乘法运算,非整除运算 |
% , // | __mod__() , __floordiv__() | 执行取余运算,整除运算 |
** | __pow__() | 执行幂运算 |
举例:
a=10
b=20
print(a.__add__(b))
print(a.__sub__(b))
print('a<b',a.__lt__(b))
print('a<=b',a.__le__(b))
特殊属性
特殊属性 | 功能描述 |
obj.__dict__ | 对象的属性字典 |
obj.__class__ | 对象所属的类 |
class.__bases__ | 类的父类元组 |
class.__base__ | 类的父类 |
class.__mro__ | 类的层次结构 |
class.__subclasses__() | 类的子类列表 |
举例:
class A:
pass
class B:
pass
class C(A,B):
def __init__(self,name,age):
self.name = name
self.age = age
a=A()
b=B()
c=C('sam',15)
#查对象的属性字典
print('a的属性字典',a.__dict__)
print('b的属性字典',b.__dict__)
print('c的属性字典',c.__dict__)
print('*'*50)
#查对象所属的类
print('a所属的类',a.__class__)
print('b所属的类',b.__class__)
print('c所属的类',c.__class__)
print('*'*50)
#查类的父类元组
print('A的父类元组',A.__bases__)
print('B的父类元组',B.__bases__)
print('C的父类元组',C.__bases__)
print('*'*50)
#查类的父类
print('A的父类',A.__base__)
print('B的父类',B.__base__)
print('C的父类',C.__base__)#如果父类有很多就只显示第一个父类
print('*'*50)
#查类的层次结构
print('A',A.__mro__)
print('B',B.__mro__)
print('C',C.__mro__)
print('*'*50)
#获取类的子类列表
print('A',A.__subclasses__())
print('B',B.__subclasses__())
print('C',C.__subclasses__())