当前位置: 首页 > 知识库问答 >
问题:

这个属性装饰器(python)有什么问题[重复]

杜起运
2023-03-14

我试图在我的类中添加属性装饰器,但出了问题。

我有6个错误!!!

我的代码:

class person:

    def __init__ (self, name, age):
        self.name = name
        self.age = age
    @property
    def age(self):
        return self.age
    @age.setter
    def age(self, new_age):
        if isinstance(new_age, int):
            self.age = new_age
    def __str__ (self):
        return f"{self.name} is {self.age}"
p1 = person('moe',34)

print(person)

共有1个答案

孟雪风
2023-03-14

您正在使用相同的名称,然后该属性将隐藏该成员。这使得这些递归问题成为self.agesetter中一次又一次地调用自身。您需要使用不同的属性名,如下所示:

class person:

    def __init__ (self, name, age):
        self.name = name
        self._age = age
    @property
    def age(self):
        return self._age
    @age.setter
    def age(self, new_age):
        if isinstance(new_age, int):
            self._age = new_age

    def __str__ (self):
        return f"{self.name} is {self.age}"

p1 = person('moe',34)
print(p1)
 类似资料:
  • 问题内容: 我已经为Employee类的父类是抽象的并且父类中的clone()方法是抽象的编写了此克隆方法。我想用此代码复制Employee对象的原始数据类型,而不是复制每个原始数据单独键入,但是此代码在我调用clone()方法的行中有问题。(此代码在Employee类中) 错误是:来自对象类型的方法clone()不可见。 但是我的Employee类在类层次结构中,可以访问Object类中受保护的

  • Object.defineProperty(target, key, { writable: false }); } @ReadOnly // notice there are no `()` name: string; const t = new Test(); t.name = 'jan';

  • 我用@Watch装饰器监听属性变化,没起作用。这个下面是代码: 尝试counter属性在其他地方被修改,希望在控制台看到Counter changed from ... to ...的日志输出,咋就是没任何输出。希望找出问题所在,使@Watch正常工作。问题在哪呢?

  • 我有一个关于书库的问题...我想写一个有3个堆栈的程序,我想在每个堆栈上添加这些操作(我应该使用数组): 1.创建堆栈2。按3号。流行音乐4号。显示每个堆栈的顶部 我写的程序,但我遇到了这些错误: 错误4错误LNK2019:未解析的外部符号“public:int\u thiscall stack::IsFull2(void)”(?IsFull2@stack@@QAEHXZ)在函数“public:v

  • 问题内容: globalList = [] class MyList: def init(self): self._myList = [1, 2, 3] 结果: 我面临的问题是mL1.myList.append(4)和mL1.myList.extend([5,6,“ eight”,“ IX”])不会修改mL1对象中的_myList属性。我该如何解决该问题? 问题答案: 我为类对象定义了方法appe

  • Python @classmethod 为什么不能调用 @property 装饰的属性 ? AttributeError: 'property' object has no attribute 依然不是没清楚