首页 > 解决方案 > python 2.7:@ (g/s)etter def 派生类失败

问题描述

我正在尝试使用“@”属性。我的代码是:

class node:
    def __init__(self, name):
        self.name = name
class person(node): #
    def __init__(self, name):
        #node.__init__(self,name)
        self.tag = name
    @property
    def tag(self):
        return self._tag
    @tag.setter
    def tag(self, val):
        if type(val) == str: 
            self._tag = val
        else:
            raise Exception("Invalid value for name")

p =person("a")
p.tag=12
print p.tag

这会在 python3 中引发异常(应该如此),但在 python 2 中运行完成(打印 12)

这是一个已知的问题?

标签: pythonpython-3.xpython-2.7

解决方案


python3 中代码的唯一问题是print语句。在 python3 中,print必须使用括号,如print(p.tag).

除此之外,您的代码很好。将 12 分配给标记时,它会失败,并出现异常“名称的值无效”。将字符串分配给标记(例如'b')时,它可以正常工作。


推荐阅读