特殊方法与属性
-
特殊属性:
属性 描述 __dict__
获得类对象或实例对象所绑定的所有属性和方法的字典 __class__
输出对象所属的类 __bases__
输出类的父类的元组 __base__
输出类继承的第一个父类(类的基类) __mro__
查看类的层次结构 __subclasses__()
察看目前类的子类是什么 # 类的特殊属性 class A: pass class B: pass class C(A,B): def __init__(self,name,age): self.name = name self.age = age # 创建C类对象(__dict__属性:) n = C('jack',20) # 实例对象:属性字典 print(n.__dict__)#{'name': 'jack', 'age': 20} # 类对象:属性以及方法的字典 print(C.__dict__)#{'__module__': '__main__', '__init__': <function C.__init__ at 0x01A6F978>, '__doc__': None} #__class__:输出了对象所属的类 print(n.__class__)#<class '__main__.C'> #__bases__:输出C类的父类的元组 print(C.__bases__)#(<class '__main__.A'>, <class '__main__.B'>) # __base__:输出C类继承的第一个父类(类的基类) print(C.__base__)#<class '__main__.A'> # 查看类的层次结构 print(C.__mro__)#(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) # 目前A的子类是什么 print(A.__subclasses__())#[<class '__main__.C'>]
-
特殊方法:
属性 描述 __len__()
通过重写 __len__()
方法,让内置函数len()的参数可以是自定义类型__add__()
通过重写 __add__()
方法,可使用自定义对象具有“+”功能__new__()
用于创建对象 __init__()
对创建的对象进行初始化 -
__add__(num)
:如下所示,c = a + b就相当于底层a通过a._add_(b)然后再赋值给ca = 20 b = 100 c = a+b d = a.__add__(b) print(c)# 120 print(d)# 120
-
普通类型的数据可以进行加法运算,也可以通过
__add__()
方法进行加的操作,但是对于自定义的类的对象不可以进行加的操作,否则会产生异常class Student: def __init__(self,name): self.name = name stu1 = Student('张三') stu2 = Student('李四') stu = stu1+stu2 #异常: Traceback (most recent call last): File "D:/Python/Python_Learn/python_learn_2021_07/demo05.py", line 7, in <module> stu = stu1+stu2 TypeError: unsupported operand type(s) for +: 'Student' and 'Student'
-
但是可以通过重写
__add__()
方法实现自定义类的对象的加法,相当于是定义出了一套适应该类的对象的相加法则:class Student: def __init__(self,name): self.name = name def __add__(self, other): return self.name+other.name stu1 = Student('张三') stu2 = Student('李四') stu = stu1+stu2 print(stu)# 张三李四
-
-
__len__()
:class Student: def __init__(self,name): self.name = name def __len__(self): return len(self.name) lst = [11,22,33,44,55] print(len(lst)) # 5 print(lst.__len__()) # 5 stu1 = Student('张三') print(len(stu1)) # 2
-