特殊属性 _dict__ 获得类对象或实例对象所绑定的所有属性和方法的字典 特殊方法 _1en_() 通过重写_1en_()方法,让内置函数1en()的参数可以是自定义类型 _add_() 通过重写__add_()方法,可使用自定义对象具有"+"功能 _new_() 用于创建对象 _init_() 对创建的对象进行初始化
特殊属性
# print(dir(object)) #################### class A: pass class B: pass class D(A): 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__) ###实例对象的属性字典 {'name': 'jack', 'age': 20} print(C.__dict__) #{'__module__': '__main__', '__init__': <function C.__init__ at 0x000001E785CEB4C0>, '__doc__': None} print('-----------------------') print(x.__class__) #<class '__main__.C'> print(C.__bases__) ## C类的父类类型的元素 (<class '__main__.A'>, <class '__main__.B'>) print(C.__base__) ## 类的基类 <class '__main__.A'> print(C.__mro__) ##类的层次结构 (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) print(A.__subclasses__()) ####查A有几个子类列表 [<class '__main__.D'>, <class '__main__.C'>]
特殊方法
a=20 b=100 c=a+b print(c) # print(d) class Student: def __init__(self,name): self.name=name def __add__(self, other): ###s=stu1+stu2需加上 return self.name+other.name ###s=stu1+stu2需加上 def __len__(self): ####计算列表长度 return len(self.name) stu1=Student('333') stu2=Student('李四') s=stu1+stu2 ###实现两个对象得加法运算(因为在Student类中,编写__add__()特的方法 print(s) s=stu1.__add__(stu2) #方法2 print(s) print('----------------------------') lst=[11,22,33,44] print(len(lst)) ####计算列表长度 print(lst.__len__()) print(len(stu1))
new 和init
class Person(object): 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))) ## p1=Person('张三',20) print('p1这个persson类的实例对象的id:{0}'.format(id(p1)))