Dưới đây là dự đoán của tôi, mà không làm việc:Làm thế nào một lớp cơ sở python cho biết liệu một lớp con đã ghi đè các phương thức của nó chưa?
class BaseClass(object):
def foo(self):
return 'foo'
def bar(self):
return 'bar'
def methods_implemented(self):
"""This doesn't work..."""
overriden = []
for method in ('foo', 'bar'):
this_method = getattr(self, method)
base_method = getattr(BaseClass, method)
if this_method is not base_method:
overriden.append(method)
return overriden
class SubClass(BaseClass):
def foo(self):
return 'override foo'
o = SubClass()
o.methods_implemented()
Lý tưởng nhất, methods_implemented() sẽ trở lại [ 'foo'].
Làm cách nào?
(Tại sao tôi muốn thực hiện việc này? Lớp cơ sở của tôi là lớp Tài nguyên HTTP có phương thức GET, POST, vv. Theo mặc định, chúng trả về 405 Phương thức không được triển khai. với tiêu đề Cho phép đặt thành các phương thức mà bất kỳ lớp con nào thực hiện.)
Tại sao wiki này là cộng đồng? –
Không chắc chắn lý do tại sao bạn muốn làm điều này. Trong bất kỳ phân cấp lớp nào, một lớp cơ sở không cần phải biết bất cứ điều gì về các lớp dẫn xuất. Nếu điều này là bắt buộc, ** có thể ** thiết kế của bạn cần được xem xét lại. – Steg
Tôi đồng ý rằng đây không phải là wiki: sẽ có câu trả lời phù hợp và có thể được chấp nhận. Ngoài ra, tôi muốn nghe thêm về lý do tại sao bạn muốn làm điều này, không phải vì bạn không nên, nhưng bởi vì nó giống như một trong những giải pháp cho một vấn đề có giải pháp tốt hơn và rất khác ở một nơi khác. –