特殊属性:__dict__
获得对象或实例对象绑定的所有属性和方法的字典
代码如下:
class A:
pass
class B:
pass
class C(A,B):
def __init__(self,name,age):
self.name = name
self.age = age
class D(A):
pass
#创建C类的对象
x = C("jack",20) #x是C类型的一个实例对象
print(x.__dict__) #实例对象的属性字典
print(C.__dict__)
print("-----------------")
print(x.__class__) #<class '__main__.C'>输出了对象所属的类
print(C.__bases__) #C类的父类的元素
print(C.__base__)
print(C.__mro__) #类的层次结构
print(A.__subclasses__()) #子类的列表
运行结果:
{'__module__': '__main__', '__init__': <function C.__init__ at 0x01949DF8>, '__doc__': None}
-----------------
<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'>, <class '__main__.D'>]
Process finished with exit code 0
特殊方法:
__len__()
:通过重写__len__()
方法,让内置函数len()的参数可以是自定义类型;
__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)
s1 = stu1.__add__(stu2)
print(s1)
print('---------------------')
list = [11,22,33,44]
print(len(list)) #len是内置函数len
print(list.__len__())
print(len(stu1))
运行结果:
120
120
张三李四
张三李四
---------------------
4
4
2
__new__()
:用于创建对象;
__init__()
:对创建的对象进行初始化。
代码如下:
class Person:
def __new__(cls, *args, **kwargs):
print("__new__被调用执行了,cls的id值为{0}".format(id(cls)))
obj = super().__new__(cls)
print('创建的对象的id为:{0}'.format(id(obj)))
return obj
def __init__(self,name,age):
print('__init__被调用了,self的id为:{0}'.format(id(self)))
self.name = name
self.age = age
print('object这个类对象的id为:{0}'.format(id(object)))
print('Person这个类对象的id为:{0}'.format(id(Person)))
#创建Person类的实例对象
p = Person('张三',20)
print('P这个类对象的id为:{0}'.format(id(p)))
运行结果:
object这个类对象的id为:2092045288
Person这个类对象的id为:17148264
__new__被调用执行了,cls的id值为17148264
创建的对象的id为:17127344
__init__被调用了,self的id为:17127344
P这个类对象的id为:17127344
Process finished with exit code 0