TypeError: Animal() takes no arguments

问题参考

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))

在这里插入图片描述
输出正常

Supongo que te gusta

Origin blog.csdn.net/weixin_55579895/article/details/121396892
Recomendado
Clasificación