特殊属性
- _ _ dict _ _
获得类对象或实例对象所绑定的所有属性和方法的字典
class A:
pass
class B:
pass
class C(A, B):
def __init__(self, name, age):
self.name = name
self.age = age
# 创建C类对象
x = C('jack', 20) # x为C类的实例对象
print(x.__dict__) # 输出实例对象的属性字典
print(C.__dict__) # 输出类对象的属性以及方法字典
{'name': 'jack', 'age': 20}
{'__module__': '__main__', '__init__': <function C.__init__ at 0x000002417251FAC0>, '__doc__': None}
---------------------------------------------------------------
print(x.__class__) # <class '__main__.C'>输出了对象所属的类型
print(C.__bases__) # (<class '__main__.A'>, <class '__main__.B'>) 输出了C类的父类类型的元组
print(C.__base__) # <class '__main__.A'>输出了离C类最近的父类的元组
print(C.__mro__) # 查看类的层次结构
print(A.__subclasses__()) # 输出A的子类的列表
<class '__main__.C'>
(<class '__main__.A'>, <class '__main__.B'>)
<class '__main__.A'>
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
[<class '__main__.C'>]
特殊方法
- _ _ len_ _()
通过重写_ _ len_ _()方法,让内置函数len()的参数可以是自定义类型
class Student:
def __init__(self, name):
self.name = name
def __add__(self, other):
return self.name + other.name
def __len__(self):
return len(self.name)
stu1 = Student('张三')
stu2 = Student('李四')
lst = [11, 22, 33, 44]
print(len(lst))
print(lst.__len__())
print(len(stu2)) # 实现了对实例对象长度的计算,由于在Student类中编写了__len__()特殊的方法
# 如果在类中不设定特殊方法就使用print(lst.__len__())的这种形式来计算实例对象的长度
-------------------------------------------------------------------
4
4
2
- _ _ add_ _()
通过重写_ _ add_ _()方法,可使用自定义对象具有”+“功能
# __add__()
a = 20
b = 100
c = a + b # 两个整数类型的对象的相加操作
d = a.__add__(b)
print(c)
print(d)
class Student:
def __init__(self, name):
self.name = name
def __add__(self, other):
return self.name + other.name
def __len__(self):
return len(self.name)
stu1 = Student('张三')
stu2 = Student('李四')
s = stu1 + stu2 # 实现了两个对象的加法运算,由于在Student类中编写了__add__()特殊的方法
print(s)
s = stu1.__add__(stu2)
print(s)
---------------------------------------------------------------
120
120
张三李四
张三李四
- _ _ new_ _()
用于创建对象
- _ _ init_ _()
对创建的对象进行初始化