0
我是Python的新手,我需要測試子類方法而無需初始化基類實例,因爲在基類中,網絡和其他組件有很多依賴關係,我的子類方法是 獨立。如何在不實例化Python中的基類的情況下測試子類方法?
我試圖通過從子類中刪除基類方法來創建一個新的子類,但它不能工作。這裏是代碼。
def remove_base(child_cls, base_cls):
allmembers = inspect.getmembers(child_cls, predicate=inspect.ismethod)
allmembers_dict = dict(allmembers)
hbasemembers = inspect.getmembers(base_cls, predicate=inspect.ismethod)
hbase_dict = dict(hbasemembers)
child_class_member = set(allmembers_dict.keys()) - set(hbase_dict.keys())
new_dict = {}
for key in allmembers_dict.keys():
for child_member in child_class_member:
if key == child_member:
new_dict[key] = allmembers_dict[key]
return new_dict
class A:
def add(self, i):
print i + 1
class B(A):
def sub(self, i):
print i - 1
newB = type("newB", (object,), remove_base(B, A))
b = newB()
b.sub(5)
的錯誤信息是:
TypeError: unbound method sub() must be called with B instance as first argument (got int instance instead)
我想去除基類的方法可能是錯誤的方式。 如何處理這個問題?
覆蓋父方法,而無需調用'super'所以纔有了孩子實施wouild被稱爲 – Cyrbil
,這是錯誤的東西是你的繼承結構。如果你的子方法完全獨立於父類,那麼你根本不應該繼承。 –
你能舉一個不太抽象的例子嗎?在你當前的例子中,顯而易見的答案是將這兩個方法'@ staticmethod'製作成它們,因爲它們根本不使用'self',然後測試'B.sub'沒有實例化任何東西。沒有上下文,這看起來像[XY問題](http://meta.stackexchange.com/q/66377/248731)。 – jonrsharpe