更新类的实例属性

时间:2016-01-27 15:06:08

标签: python

我一直在谷歌上搜索这个话题,但我并没有找到一种普遍接受的方法来实现我的目标。

假设我们有以下类:

ContextMenuStrip

let items = Variable([ "First Item", "Second Item", "Third Item" ]) items .bindTo(tableView.rx_itemsWithCellIdentifier("Cell", cellType: UITableViewCell.self)) { (row, element, cell) in cell.textLabel?.text = "\(element) @ row \(row)" /* to do some binding or something else ? */ } .addDisposableTo(disposeBag) tableView .rx_modelSelected(String) .subscribeNext { value in DefaultWireframe.presentAlert("Tapped `\(value)`") items.value = ["item 1", "item 2"] //your updated array } .addDisposableTo(disposeBag) 应该是一个numpy数组!如果我跑

import numpy as np
class MyClass:

    def __init__(self, x):
        self.x = x
        self.length = x.size

    def append(self, data):
        self.x = np.append(self.x, data)

我得到了

xA = MyClass(x=np.arange(10)) print(A.x) print(A.length) 。到现在为止还挺好。但是如果我使用追加方法

[0 1 2 3 4 5 6 7 8 9]

我得到10A.append(np.arange(5)) 。这也是预期的,因为在[0 1 2 3 4 5 6 7 8 9 0 1 2 3 4]的实例化期间设置了实例属性10。现在我不确定更新实例属性的最pythonic方法是什么。例如,我可以再次运行length

A

然后__init__属性将具有正确的值,但在此处的其他一些帖子中,我发现这在某种程度上令人不悦。另一个解决方案是直接更新A.__init__(A.x) 方法中的length属性,但我有点想避免这种情况,因为我不想忘记在某个时候更新属性。是否有更多pythonic方法更新此类的length属性?

1 个答案:

答案 0 :(得分:7)

不要更新,只需读取,只需a getter

class MyClass:
    ...

    @property
    def length(self):
        return self.x.size