特殊方法与属性
-
特殊属性:
属性 | 描述 |
---|
__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
n = C('jack',20)
print(n.__dict__)
print(C.__dict__)
print(n.__class__)
print(C.__bases__)
print(C.__base__)
print(C.__mro__)
print(A.__subclasses__())
-
特殊方法:
属性 | 描述 |
---|
__len__() | 通过重写__len__() 方法,让内置函数len()的参数可以是自定义类型 | __add__() | 通过重写__add__() 方法,可使用自定义对象具有“+”功能 | __new__() | 用于创建对象 | __init__() | 对创建的对象进行初始化 |
-
__add__(num) :如下所示,c = a + b就相当于底层a通过a._add_(b)然后再赋值给c a = 20
b = 100
c = a+b
d = a.__add__(b)
print(c)
print(d)
-
普通类型的数据可以进行加法运算,也可以通过__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))
print(lst.__len__())
stu1 = Student('张三')
print(len(stu1))
?
|