Python基础30 类的特殊属性(dict、class、bases、base、mro、subclasses)和特殊方法(init、new、add、len)

一、类的特殊属性

class A:
    pass
class B:
    pass
class C(A,B):
    def __init__(self,name,age):
        self.name=name
        self.age=age
"""
类的特殊属性
"""
# 获得对象或实例对象所绑定的所有属性和方法的字典
print(object.__dict__)
x=C("Jack",18)
print(x.__dict__) # 实例对象的属性字典
print(C.__dict__)

print(x.__class__) # 输出这个对象所属的类
print(C.__bases__) # C类的父类类型的元素
print(C.__base__) # C类的第一个父类类型的基类
print(C.__mro__) # C类的层次结构
print(A.__subclasses__())   # 子类的列表

二、类的特殊方法(__ add__())

"""
类的特殊方法1
1、__len__ 重写这个方法,让内置函数len()的参数可以是自定义
2、__add__ 重写这个方法,可以使自定义对象有"+"功能
3、__new__ 用于创建对象
4、__init__ 用于对创建的对象进行初始化
"""
# __add__
a=20
b=100
c=a+b
print(c)
d=a.__add__(b)
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 # 实现了两个对象的加法运算,因为在类中重写了__add__方法
print(s)

三、类的特殊方法(__ len__())

# __len__
lst=[1,2,3,4]
print(len(lst)) # 内置函数len 算出列表的长度
print(len(stu1))

四、类的特殊方法(__ new__()和__ init__())

"""
类的特殊方法2
"""
# __new__方法
class Person(object):
    def __init__(self,name,age):
        print("__init__被调用了,self的id值为:{0}".format(id(self)))
        self.name=name
        self.age=age
    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
p1=Person("李四",19)
print("object这个类对象的id为:{0}".format(id(object)))
print("Person这个类对象的id为:{0}".format(id(Person)))
print("P1这个类对象的id为:{0}".format(id(p1)))
"""
结论 new中创建的对象其实就是init中的self
Person传给cls 然后传给object 然后进行创建对象 obj
new中的obj 就是self 然后就是创建出来的p1
"""
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值