Python Vs Go 鸭子类型
这次简单介绍下 鸭子类型的概念。
当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。
鸭子类型关注点在对象的行为,而不是类型。在 Python 和 Go 中都可以实现鸭子类型。
示例代码如下:
class Duck:
def __init__(self, name):
self.name = name
def quack(self):
print("gua gua")
class Man:
def __init__(self, name):
self.name = name
def quack(self):
print("女王大人")
def do_quack(ducker):
ducker.quack()
if __name__ == '__main__':
d = Duck('duck')
m = Man('man')
do_quack(d)
do_quack(m)
// go demo
package main
import "fmt"
type Ducker interface {
Quack()
}
type Duck struct {
name string
}
func (Duck) Quack() {
fmt.Println("gua gua")
}
type Man struct {
name string
}
func (Man) Quack() {
fmt.Println("女王大人")
}
func DoQuack(d Ducker) {
d.Quack()
}
func main() {
d := Duck{"duck"}
m := Man{"man"}
DoQuack(d)
DoQuack(m)
}