问题参考
Python中报错提示:TypeError: Student() takes no arguments
问题背景
在联系python经典面试题的时候,做到了解引用计数机制时,创建类报错
附上联系网址python面试常见问题
# 91、简述python引用计数机制
# python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题。
# 引用计数算法
# 当有1个变量保存了对象的引用时,此对象的引用计数就会加1
# 当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除
import time
class Animal(object):
# 创建对象后会自动被调用
def __init_(self,name):
print('__init__方法被调用')
self.name = name
# 当对象被删除时,会自动被调用
def __del__(self):
print('__del__方法被调用')
print('%s对象马上被干掉了。。。' % self.name)
cat = Animal('霸王')
cat.name = '霸王'
cat2 = cat
cat3 = cat
print(id(cat),id(cat2),id(cat3))
报错:
TypeError: Animal() takes no arguments
问题解决
错误是下划线问题,正确的下划线是左右各两条 init , 而不是一条 init
修改代码如下
# 91、简述python引用计数机制
# python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题。
# 引用计数算法
# 当有1个变量保存了对象的引用时,此对象的引用计数就会加1
# 当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除
import time
class Animal(object):
# 创建对象后会自动被调用
def __init__(self,name):
print('__init__方法被调用')
self.name = name
# 当对象被删除时,会自动被调用
def __del__(self):
print('__del__方法被调用')
print('%s对象马上被干掉了。。。' % self.name)
cat = Animal('霸王')
cat.name = '霸王'
cat2 = cat
cat3 = cat
print(id(cat),id(cat2),id(cat3))
输出正常