【发布时间】:2019-11-23 20:19:32
【问题描述】:
我无法弄清楚为什么最后一个断言不起作用。错误消息“type object 'Student' has no attribute 'name'”让我更加困惑,因为 Student 有一个名为 name 的属性。有什么解决办法吗?
class Student:
def __init__(self, name, imt_name, semester):
self.name = name
self.imt_name = imt_name
self.semester = semester
def get_name(self):
return self.name
def __str__(self):
return ("{} [{}] in Semester {}".format(self.name, self.imt_name, self.semester))
x = property(get_name)
#asserts and test
assert type(Student) is type
student_horst = Student("Horst", "horst99", 2)
assert student_horst.name == "Horst"
assert student_horst.imt_name == "horst99"
assert student_horst.semester == 2
student_horst.semester = 3
assert student_horst.semester == 3
#this one is not working!
assert isinstance(getattr(Student, "name"), property)
【问题讨论】:
-
假设缩进修复;您尚未命名属性名称,而是将其命名为 x。 实例有一个属性名,但类没有。
-
如果我将属性命名为“名称”,它会解决问题吗?
-
那么你会遇到一个不同的问题,因为 name 的 getter 访问 name 属性,它调用 name 的 getter,...
-
所以更改 init 中的参数并重命名属性将修复它
-
是的;按照惯例,支持属性使用前导下划线 _name 命名。
标签: python class properties assert getter