01/10/2018, 12:22

Sau khi nạp list vào constructor, lúc in ra kết quả chỉ thu được list rỗng

Mình có đoạn code này:

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Tại sao lúc print(lines) sau khi gọi lines_type(lines) lại in ra list rỗng?

Henry viết 14:27 ngày 01/10/2018

Vì kế thừa từ class list

class lines_type(list):

Nên nó sẽ trả về một list rỗng.
Nhưng những thuộc tính của anh vẫn sẽ được bảo toàn.
Nó giống như anh viết thêm một số thuộc tính cho một cái List object thôi. Tuy vậy, Type của nó vẫn là class của anh.

HK boy viết 14:25 ngày 01/10/2018

Có cách nào để nó không trả về list rỗng không?

Henry viết 14:26 ngày 01/10/2018

Ta có thể làm như thế này

class lines_type(list):
    def __init__(self, lines):
        list.__init__(self, lines[:])
HK boy viết 14:26 ngày 01/10/2018
Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Nó không in ra chuỗi rỗng nữa, nhưng không gọi được method .print_all_lines().

Henry viết 14:29 ngày 01/10/2018

Em mới nghĩ ra cách

for u in self:

Nhưng mà có thể nó bóp mấy phần sau nên đang suy nghĩ thêm.

Henry viết 14:31 ngày 01/10/2018

Theo em nghĩ, khi kế thừa từ List thì self nó đã là một List, không cần phải đưa cái list đó thành một attribute mới. Còn nếu muốn mới thì không kế thừa từ List.

HK boy viết 14:23 ngày 01/10/2018

OK, anh sẽ xem lại cả code xem có cần bỏ kế thừa từ List hay không. Cảm ơn em nha.

HK boy viết 14:24 ngày 01/10/2018

Có lẽ không bỏ kế thừa được rồi. Anh còn dùng cả indexing nữa. Nếu bỏ thì lỗi ngay.

Henry viết 14:33 ngày 01/10/2018

Nếu vậy thì đừng dùng attribute để lưu một cái List.

Bài liên quan
0