下面是我正在試圖解決的編碼問題......我有一個基類,讓我們說Animal,它有兩個子類,Dog和Cat。我的類動物有一個方法,make_baby(),狗和貓都會繼承。我無法解決的技巧是,我希望返回值是調用該函數但具有不同屬性值的子類的新實例,即Dog.make_baby()應該返回一個新的Dog和Cat.make_baby() )將返回一個新的貓。Python類:在基類的方法中創建變量子類
我以前試過返回「type(self)()」,但這不好,因爲type()返回一個類型對象,而不是類。
以下是完整的示例代碼:
Class Animal():
def __init__(self, color):
self.color = color
def make_baby():
new_color = rand_color # a randomly chosen color
return #??? new class of the same type that called the method
Class Dog(Animal):
def pet():
print '*pant*'
Class Cat(Animal):
def pet():
print 'purrr'
所以我想避免寫狗和貓一make_baby()方法,因爲這個想法是,該方法是完全除外返回相同類。我還想避免一堆if語句,因爲我想爲Animal創建任意大量的子類。
謝謝!這真是讓我煩惱,因爲我真的有我的真正的代碼使用type(self)(...),但是然後莫名其妙地停止工作。我意識到這是因爲我的基類最初是列表的一個子類,我決定這沒有意義,所以我刪除了它,並且沒有父類。我已經添加了對象作爲父類,它再次運行!我打算使用您提出的@classmethod建議,這聽起來像一個靈活的想法。再次感謝。 – ampron 2012-02-17 21:09:09
如果需要實例,則類方法將不適用,例如如果涉及遺傳學。雖然在這種情況下,通過動態打字不會有防止雜亂的自然方法 - 你知道什麼,忘記我說了什麼。 – 2012-02-17 21:23:21
@KarlKnechtel:您必須指的是Python着名的「f \ * ck typing」。 – kindall 2012-02-18 00:18:46