当前位置: 首页 > 面试题库 >

在类对象中,如何自动更新属性?

乌学博
2023-03-14
问题内容

我有一个具有多个相关属性的类,例如:

class SomeClass:
    def __init__(self, n=0):
        self.list = range(n)
        self.listsquare = [ x**2 for x in self.list ]

如果我正常地制作一个对象,那没有问题,

a = SomeClass(10)

我将得到2个列表,a.lista.listsquare

现在,如果我想先创建一个空对象,并为其分配一个属性,则希望其他属性自动更新,例如

b = SomeClass()
b.list = range(5,10)

我想b.listsquare自动更新,也想自动更新(分配b.listsquare和自动更新b.list)。这可能吗? Class
是否是正确的选择?

谢谢大家,但是所有其他答案让我完全不知所措。谁能提供一个完整的解决方案,让我可以学习编写自己的解决方案?

我想实现一类Foo具有3个属性lengthlist并且listsquare这样的:

  1. 如果我这样做a = Foo(3),我得到的a.length = 3a.list = [0, 1, 2]a.listsquare = [0, 1, 4]
  2. 如果我这样做b = Foo().list = [5, 6],我得到的b.length = 2b.listsquare = [25, 36]
  3. 如果我这样做c = Foo().listsquare = [4, 9],我得到的c.length = 2c.list = [2, 3]

问题答案:

如果要查找的是由于另一个属性的更新而导致更新一个属性(而不是重新计算访问时下游属性的值),请使用属性设置器:

class SomeClass(object):
    def __init__(self, n):
        self.list = range(0, n)

    @property
    def list(self):
        return self._list
    @list.setter
    def list(self, val):
        self._list = val
        self._listsquare = [x**2 for x in self._list ]

    @property
    def listsquare(self):
        return self._listsquare
    @listsquare.setter
    def listsquare(self, val):
        self.list = [int(pow(x, 0.5)) for x in val]

>>> c = SomeClass(5)
>>> c.listsquare
[0, 1, 4, 9, 16]
>>> c.list
[0, 1, 2, 3, 4]
>>> c.list = range(0,6)
>>> c.list
[0, 1, 2, 3, 4, 5]
>>> c.listsquare
[0, 1, 4, 9, 16, 25]
>>> c.listsquare = [x**2 for x in range(0,10)]
>>> c.list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


 类似资料:
  • 问题内容: 我有一个像这样的JSON字符串: 我想将属性更新为,如果值为,并且值为。 我已经到了这一点,但是不确定如何进行: 我不知道怎么去的是一个孩子。 提前致谢。任何指针都很棒。 问题答案: 您可以使用属性作为键来访问对象: 对于您的示例,请尝试:

  • 假设我想添加/更改一些json对象,如何在不重新启动服务器的情况下进行更新?nodemon是去的选择,还是我该怎么想?

  • 问题内容: 我想在Qml中显示一个矩形,并且想从我的python代码中更改矩形的属性(宽度,长度)。实际上,在python代码中有一个套接字连接,通过该套接字连接可以从另一台计算机接收width和length的值。简而言之:另一个用户应该能够实时调整此矩形。我知道如何在我的python文件中建立套接字连接,并使用PyQt5,我可以显示来自python的qml文件。 但是,我在通过python代码访

  • 问题: 我使用 pinia 进行状态管理,写法大概如下,由于我修改的是数组中某个对象下的对象的属性,数组更新后,页面无法重新渲染。 当我点击按钮修改元素的 x,y,width,height 某个样式值的时候,layerList 中对应的元素的下的style对象的下属性值也会更新,由于页面是根据这个对象来渲染内联样式的, style 在手动更新后一直无法更新,想请教下各位大佬这是什么原因? 数组 l

  • 我想知道是否可以在同伴对象中使用类的属性。例如,以贝娄为例: 我不能通过c1或C2调用changeAge()函数。我可以使用changeAge的唯一地方是通过Person1.changeAge(),当Person1还没有用适当的构造函数实例化时。我想知道这些动作是不是有其他的选择,或者是没有,有同伴对象有什么意义呢

  • 我有以下Java超类,每个属性都有构造函数、getter和setter: 和一个car子类,它扩展了vehicle超类,并具有几个独特的属性: 我创建一个新的vehicle对象链表,并向其中添加一个新的car对象: 我可以用下面这样的函数更改属于vehicle超级类的任何属性: 但是当我试图创建一个类似的函数来更改其中一个子类属性时,我得到了这个错误:“方法setWheels(int)对于类型Ve