我剛纔讀了維基百科的文章關於duck typing,我覺得我想念的界面概念,我在Java中使用到的重要一點:鴨打字和(JAVA)的接口概念
"When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."
class Duck:
def quack(self):
print("Quaaaaaack!")
def feathers(self):
print("The duck has white and gray feathers.")
def swim(self):
print("Swim seamlessly in the water")
class Person:
def quack(self):
print("The person imitates a duck.")
def feathers(self):
print("The person takes a feather from the ground and shows it.")
def name(self):
print("John Smith")
def in_the_forest(duck):
duck.quack()
duck.feathers()
def game():
donald = Duck()
john = Person()
in_the_forest(donald)
in_the_forest(john)
game()
如果什麼,在in_the_forest
,我寫:
- 做它
quack
如魚得水?是 - 它有一隻鴨子
feathers
?是的 - 太棒了,這是我們的鴨子!
以後,因爲我知道這是一隻鴨子,我想要它swim
? john
會下沉!
我不希望我的應用程序在其進程中間崩潰(隨機),只是因爲John僞造成鴨子,但我想檢查對象的每個屬性都不是明智的做法當我收到它...?
+1:提出的問題 – msw
總之,你不用擔心。您編寫的測試涵蓋了儘可能多的代碼路徑和角落案例,但是100%的安全性是不可能的。並且請注意,Java或其他大多數靜態類型系統無法保證100%的安全性) – delnan
+1:關於重要主題的一個非常好的問題,重中之重。對不起,我只能給它1 upvote。 – Dave