Tôi biết việc tạo phương thức tùy chỉnh __repr__
hoặc __add__
(v.v.), để sửa đổi hành vi của các toán tử và chức năng. Có ghi đè phương pháp cho len
không?Có thể sửa đổi hành vi của len() không?
Ví dụ:
class Foo:
def __repr__(self):
return "A wild Foo Class in its natural habitat."
foo = Foo()
print(foo) # A wild Foo Class in its natural habitat.
print(repr(foo)) # A wild Foo Class in its natural habitat.
này có thể được thực hiện cho len
, với một danh sách? Thông thường, nó sẽ trông như sau:
foo = []
print(len(foo)) # 0
foo = [1, 2, 3]
print(len(foo)) # 3
Nếu tôi muốn loại bỏ các loại tìm kiếm thì sao? Như thế này:
class Bar(list):
pass
foo = [Bar(), 1, '']
print(len(foo)) # 3
count = 0
for item in foo:
if not isinstance(item, Bar):
count += 1
print(count) # 2
Có cách nào để thực hiện việc này từ trong lớp con list
không?
Bạn đã có câu trả lời tốt, nhưng trong trường hợp bạn muốn tìm hiểu thêm về phương pháp kỳ diệu Tôi có thể đề nghị [Hướng dẫn phương pháp kỳ diệu của Python] (http: // www. rafekettler.com/magicmethods.html);) – swenzel
Điều này sẽ có ích một chút! Cám ơn vì đã chia sẻ. @swenzel –
Bạn có một lớp con danh sách, không phải là một siêu lớp danh sách. – wim