内存分析实例对象和类对象创建过程、__del__、__call__方法

本文深入探讨Python中类的高级特性,包括实例方法、类属性、实例属性、构造与析构方法(__init__和__del__),以及如何使对象成为可调用对象(__call__)。通过具体代码示例,详细解析这些特性的使用场景和实现机制。

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

我们以下面代码为例,分析整个创建过程:

class Student:
    school = "麻省理工" #类属性
    count = 0 #类属性
    def __init__(self,name,score):
        self.name = name #实例属性
        self.score = score
        Student.count = Student.count+1
    def say_score(self): #实例方法
        print("我的学校是:",Student.school)
        print(self.name,'的分数是:',self.score)

s1 = Student('Alice',90) #s1 是实例对象,自动调用__init__()方法
s1.say_score()
print('一共创建{0}个 Student 对象'.format(Student.count))

alt

__del__方法(析构函数)和垃圾回收机制

__del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象占用的资源,例如:打开的文件资源、网络连接等。
  Python 实现自动的垃圾回收,当对象没有被引用时(引用计数为 0),由垃圾回收器调用__del__方法。
  我们也可以通过 del 语句删除对象,从而保证调用__del__方法。
  系统会自动提供__del__方法,一般不需要自定义析构方法。

class Person:
    def __del__(self):
        print("销毁对象:{0}".format(self))
p1 = Person()
p2 = Person()
del p2   #p2该对象引用被删除,所以会启动垃圾回收机制,先被销毁,p1最后被销毁。
print("程序结束",p1)

运算结果:
销毁对象:<__main__.Person object at 0x00000192A8094F98>
程序结束 <__main__.Person object at 0x00000192A8094E10>
销毁对象:<__main__.Person object at 0x00000192A8094E10>

__call__方法和可调用对象

定义了__call__方法的对象,称为“可调用对象”,即该对象可以像函数一样被调用。

class SalaryAccount:
    '''工资计算类'''
    def __call__(self, salary):
        yearSalary = salary*12
        daySalary = salary//30
        hourSalary = daySalary//8
        return dict(monthSalary=salary,yearSalary=yearSalary,daySalary=daySalary\
,hourSalary=hourSalary)
s = SalaryAccount()
print(s(5000)) #可以像调用函数一样调用对象的__call__方法

运行结果:
{'monthSalary': 5000, 'yearSalary': 60000, 'daySalary': 166, 'hourSalary': 20}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值