物业似乎运作方式不对

2024-09-29 18:51:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么最后一个断言不起作用。错误消息“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)

Tags: nameselfgetreturnisdeftypeproperty
2条回答

要检查实例是否具有给定的属性(按名称),需要使用^{}函数,如下所示:

assert hasattr(student_horst, "name")

名字从来不是一个属性,x是

class Student:
    def __init__(self, name):
        self._name = name # this is an attribute

    @property
    def name(self): # property
        return self._name

    def get_name(self):
        return self._name

    x = property(get_name) # x is a property not _name

student = Student('Horst')
print(student._name, student.name, student.x, sep='\n')
assert isinstance(getattr(Student, 'name'), property)
assert isinstance(getattr(Student, 'x'), property)

相关问题 更多 >

    热门问题