特殊属性 _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)))
