Làm cách nào để ghi đè lên một phương thức đặc biệt của lớp học?Lớp ghi đè của Python (không phải ví dụ) Các phương pháp đặc biệt
Tôi muốn có thể gọi phương thức __str__()
của lớp mà không cần tạo cá thể. Ví dụ:
class Foo:
def __str__(self):
return 'Bar'
class StaticFoo:
@staticmethod
def __str__():
return 'StaticBar'
class ClassFoo:
@classmethod
def __str__(cls):
return 'ClassBar'
if __name__ == '__main__':
print(Foo)
print(Foo())
print(StaticFoo)
print(StaticFoo())
print(ClassFoo)
print(ClassFoo())
sản xuất:
<class '__main__.Foo'>
Bar
<class '__main__.StaticFoo'>
StaticBar
<class '__main__.ClassFoo'>
ClassBar
nên là:
Bar
Bar
StaticBar
StaticBar
ClassBar
ClassBar
Thậm chí nếu tôi sử dụng @staticmethod
hoặc @classmethod
các __str__
vẫn còn sử dụng được xây dựng trong Python định nghĩa cho __str__
. Nó chỉ hoạt động khi nó là Foo().__str__()
thay vì Foo.__str__()
.
-1: "gọi phương thức' __str __() 'của lớp mà không tạo một thể hiện". Phá vỡ mọi sự hiểu biết bất cứ ai có đối tượng là gì. Vui lòng đừng làm vậy. Nó làm cho chương trình hoàn toàn vi phạm những kỳ vọng cơ bản nhất của chúng tôi. –
Tôi không đồng ý. Nếu bạn gọi str (MyClass) thì không có lý do nào bạn mong đợi nó hoạt động như thể bạn vừa gọi str (myClassObject). Đó là, không có kỳ vọng cơ bản để bắt đầu với. Tôi nghi ngờ anh ta muốn tạo ra một lớp tĩnh và không bao giờ có ý định tạo ra bất kỳ trường hợp nào của nó. –