python - 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)
这是一个已知的问题?
解决方案
python3 中代码的唯一问题是print
语句。在 python3 中,print
必须使用括号,如print(p.tag)
.
除此之外,您的代码很好。将 12 分配给标记时,它会失败,并出现异常“名称的值无效”。将字符串分配给标记(例如'b')时,它可以正常工作。
推荐阅读
- java - 在父类的字段初始化上使用派生类的EntityManger
- sql-server - Perform SUM query in ADO.NET
- python - 我如何解释我的 knn 和决策树的结果?
- python - Scrapy无法访问子div类
- javascript - Vanilla JS TypeError:无法读取属性
- c - C 编程 - 不能多次调用函数
- spring-cloud-dataflow - 如何启动/停止 Spring Cloud DataFlow 中的所有任务
- laravel - 在共享主机上托管时如何解决 laravel 的图像上传问题?
- spring-boot - 如何在 Thymeleaf 中使用 HttpServletRequest 和 HttpServletResponse?
- tensorflow - 使用 Tensorflow 对象检测 API 的实时计数器