类,__dift__,__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
class D(A):
    pass

x=C('张三',20)
print(x.__dict__ )#实例对象的属性字典
print(C.__dict__ )#类对象的属性和方法的字典
print(x.__class__ )#输出实例对象所属的类
print(C.__bases__ )#输出子类对象的所有父类
print(C.__base__ )#输出子类绑定的多个父类中第一个父类
print(C.__mro__ )#查看类的层次结构
print(A.__subclasses__() )#查看类对象的子类列表

‘’‘类对象中特殊的方法’’’

class Student:
    def __init__(self,name):
        self.name=name

    def __len__(self):#通过重写__len__()方法,可使内置函数len()的参数可以是自定义类型
        return len(self.name)

    def __add__(self, other):#通过重写__add__方法可使自定义对象具有’+‘功能
        return self.name+other.name
stu1=Student('张三')
stu2=Student('李四')
stu3=stu1+stu2
print(stu3)#输出:张三李四

stu4=stu1.__add__(stu2)
print(stu4)#输出:张三李四

print(len(stu3))#输出:4(stu3的字符串的长度)

print('-------------------------------------')

class Person:
    def __new__(cls, *args, **kwargs):#接收p1的传输,输出的cls的id值与Person的id值相等
        print('__new__被调用执行了,cls的id值为:{0}'.format(id(cls)))#cls的id值:2146785008560
        obj=super().__new__(cls)#将接收了Person的cls属性进行了,创建了对象obj,得到了新的id
        print('创建的对象(obj)的值为:{0}'.format(id(obj)))#obj的id值:2146791471760
        return obj#return返回了obj的id给self,所以self的id值与obj的id值相同
    def __init__(self,name,age):
        print('__init__被调用了,self的id值为:{0}'.format(id(self)))#self的id值:2146791471760
        self.name=name
        self.age=age
        #执行完__init__初始化方法之后将self的值传给了p1,所以p1的id值与self的id值相同

print('object的id值为:{0}'.format(id(object)))#object的id值:140728660494752
print('Person的id值为:{0}'.format(id(Person)))#Person的id值:2146785008560

#创建Person的实例对象
p1=Person('张三',20)#先执行等号后的赋值操作,先将Person传输给函数(cls)
print('创建的实例对象(p1)的id值为:{0}'.format(id(p1)))#p1的id值:2146791471760

#输出顺序:
'''object的id值为:140728660494752
Person的id值为:2146785008560
__new__被调用执行了,cls的id值为:2146785008560
创建的对象(obj)的值为:2146791471760
__init__被调用了,self的id值为:2146791471760
创建的实例对象(p1)的id值为:2146791471760'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值