Discuss / Python / (救救孩子吧)AttributeError: 'c' object attribute 'getname' is read-only

(救救孩子吧)AttributeError: 'c' object attribute 'getname' is read-only

Topic source
from types import MethodType
class c(object):
    __slots__=("name","age","getname")
    passc1=c()
c1.name="harry"def getname(self):
    print(self.name)
c.getname=getname
c1.getname=MethodType(getname,c1)
c1.getname()

Ron09900

#2 Created at ... [Delete] [Delete and Lock User]
getname 这个是 属性啊 是只允许给这个字段赋值
c1.getname=MethodType(getname,c1)
应该改为 
c1.get_name = MethodType(getname,c1)
c1.get_name
你的这两行代码 c.getname = getname 和 c1.getname = MethodType(getname, c1) 重复了
删除任意一行代码,就可以正确执行。

3楼正解。其次楼主记住slots关键字只是限制于实例属性名的,并不限制实例方法名。

def getname(self):
    print(self.name)
c1.getname = 'zct'   #getname属性
print(c1.getname)
c1.getname=MethodType(getname,c1)   #getname为函数
c1.getname()

所以不建议属性名与函数名同名!!!


  • 1

Reply