概念
概念:
特殊属性:__dict__ 获得类对象或实例对象所绑定的所有属性和方法
特殊方法:__len__() 通过重写__len__()方法,让内置函数len()的参数可以是自定义类型
__add__()方法,可以使用自定义对象具有“+”功能
__new__() 用于创建对象
__init__() 对创建的对象进行初始化
特殊方法的代码:
class A:
pass
class B:
pass
class C(A,B):
def __init__(self,name,age):
self.name = name
self.age = age
#创建C类的对象
x = C("jaca",20) #x是C类的一个实例对象
print(x.__dict__) #查看实力对象的属性字典
print(C.__dict__)
print(x.__class__) #<class '__main__.C'>输出对象所属的类
print(C.__bases__) # (<class '__main__.A'>, <class '__main__.B'>)输出C类的父类型的元组
print(C.__base__)
print(C.__mro__) #(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)类的层次结构
print(A.__subclasses__()) #[<class '__main__.C'>]子类的列表
print("<------------------------------------------------------------->")
class Student:
def __init__(self,name):
self.name = name
def __add__(self, other):
return self.name+other.name
stu1 = Student("张三")
stu2 = Student("李四")
s=stu2+stu1 #实现了两个对象的加法运算(因为在Student类中,编写__add__()特殊方法)
print(s)
#写法2
s=stu2.__add__(stu1)
print(s)
运行结果
{'name': 'jaca', 'age': 20}
{'__module__': '__main__', '__init__': <function C.__init__ at 0x000001FBDBA8DEA0>, '__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 Person(object):
def __new__(cls, *args, **kwargs):
print("__new__被调用执行了,als的值为{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类的实例对象
p1 = Person("张三",2)
print("P1这个Person类的实例对象的id为:{0}".format(id(p1)))
运行结果
object这个类对象的id为:1589298624
Person这个类对象的id为:1780819196168
__new__被调用执行了,als的值为{0} 1780819196168
创建对象的id为:{0} 1780818285120
__init__被调用了,self的id值为:{0} 1780818285120
P1这个Person类的实例对象的id为:1780818285120