Menggunakan for loop seperti ini:

for k in time :
        def byPrice(stock):
            st = stock.get_momentum
            return st[k]
        s = sorted(obj, key=byPrice)

Saya ingin mengurutkan daftar objek stock berdasarkan item ke-k dalam larik momentum di dalam setiap objek stok.

class stock:
    def __init__(self, name, price):
        self.name = name
        self.lens = len(price)

    def get_momentum(self):
        momentum = []
        for i in np.arange(lens):
             count = close[i]/close[i-60]
             momentum.append(count)
        return momentum

Tapi saya mendapat peringatan yang mengatakan 'method' object is not subscriptable. Dan kesalahannya ada di baris st[k]

-1
Jerry Li 8 Agustus 2017, 05:37

2 jawaban

Jawaban Terbaik

Cukup tambahkan tanda kurung:

for k in time :
        def byPrice(stock):
            st = stock.get_momentum()
            return st[k]
        s = sorted(obj, key=byPrice)

Anda harus benar-benar memanggil metode Anda. Jika tidak, st adalah objek metode, dan st[k] tidak masuk akal.

Anda juga dapat melakukan ini tanpa mendefinisikan byPrice dengan

s = sorted(obj, key=lambda stock:stock.get_momentum()[k]) 

(bisa dibilang lebih sulit untuk dibaca). Atau Anda dapat mendefinisikan byPrice di luar loop dan meminta k sebagai argumen lain.

2
perigon 8 Agustus 2017, 02:39

Anda menyetel variabel st ke metode kelas aktual stock.get_momentum, dan objek metode/fungsi tidak memiliki akses berbasis indeks. Itulah yang dimaksud dengan not subscriptable.

Hanya kesalahan ketik kecil, terjadi sepanjang waktu! Ubah st = stock.get_momentum menjadi st = stock.get_momentum().

1
JoshuaRLi 8 Agustus 2017, 02:40