Python Vs Go,鸭子类型,你有我也有

285 阅读1分钟
原文链接: zhuanlan.zhihu.com

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)
}