特殊属性和方法的概念及代码案例

本文介绍了Python中的特殊属性和方法,包括它们的概念,并通过代码案例展示了如何使用这些特殊方法和属性,帮助读者理解其运行结果。

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

概念

概念:


特殊属性:__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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值