特殊属性与特殊方法

本文深入探讨了Python中的特殊方法,包括__dict__、__len__、__add__、__new__和__init__等,解释了这些方法如何增强类的功能,并提供了具体的实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特殊属性

  • _ _ dict _ _

获得类对象或实例对象所绑定的所有属性和方法的字典

class A:
    pass


class B:
    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__)  # 输出实例对象的属性字典
print(C.__dict__)  # 输出类对象的属性以及方法字典


{'name': 'jack', 'age': 20}
{'__module__': '__main__', '__init__': <function C.__init__ at 0x000002417251FAC0>, '__doc__': None}
---------------------------------------------------------------
print(x.__class__)  # <class '__main__.C'>输出了对象所属的类型
print(C.__bases__)  # (<class '__main__.A'>, <class '__main__.B'>) 输出了C类的父类类型的元组
print(C.__base__)  # <class '__main__.A'>输出了离C类最近的父类的元组
print(C.__mro__)  # 查看类的层次结构
print(A.__subclasses__())  # 输出A的子类的列表


<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'>]

特殊方法

  • _ _ len_ _()

通过重写_ _ len_ _()方法,让内置函数len()的参数可以是自定义类型

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('李四')

lst = [11, 22, 33, 44]
print(len(lst))
print(lst.__len__())

print(len(stu2))  # 实现了对实例对象长度的计算,由于在Student类中编写了__len__()特殊的方法
# 如果在类中不设定特殊方法就使用print(lst.__len__())的这种形式来计算实例对象的长度
-------------------------------------------------------------------
4
4
2
  • _ _ add_ _()

通过重写_ _ add_ _()方法,可使用自定义对象具有”+“功能

# __add__()
a = 20
b = 100
c = a + b  # 两个整数类型的对象的相加操作
d = a.__add__(b)

print(c)
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  # 实现了两个对象的加法运算,由于在Student类中编写了__add__()特殊的方法
print(s)

s = stu1.__add__(stu2)
print(s)
---------------------------------------------------------------
120
120
张三李四
张三李四
  • _ _ new_ _()

用于创建对象

  • _ _ init_ _()

对创建的对象进行初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蛰伏GR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值