关于 Golang 和 Python 设计数据结构思维的区别

查看 54|回复 2
作者:Lighthughjiajin   
from abc import ABC, abstractmethod
class Device(ABC):
    @abstractmethod
    def fn(self):
        raise NotImplementedError
    def sync(self):
        print("Start Sync ...")
        self.fn()
        print("Start Done.")
class PC(Device):
    def fn(self):
        print("PC Device fn!!!")
class Router(Device):
    def fn(self):
        print("Router Device sync")
def start_sync(d: Device):
    d.sync()
if __name__ == '__main__':
    p = PC()
    r = Router()
    start_sync(p)  # Run p.fn()
    start_sync(r)  # Run r.fn()
请熟悉 Go 的大佬指导下,在 Go 中如何用接口与结构体实现类似的功能?(子类只需要重写 fn 方法,在 start_sync 处调用基类的 sync 时,能调用到子类重写后的 fn 方法)

def, device, self, print

FreeEx   
golang 不支持方法重载。
https://go.dev/doc/faq#overloading
> 为什么 Go 不支持方法和运算符的重载?
> 如果方法分派也不需要进行类型匹配,则它会得到简化。使用其他语言的经验告诉我们,具有相同名称但不同签名的各种方法偶尔有用,但在实践中也可能令人困惑和脆弱。仅按名称匹配并要求类型一致是 Go 类型系统中的一个主要简化决策。
> 关于运算符重载,它似乎比绝对要求更方便。同样,没有它,事情会更简单。
Alias4ck   
语言的转换 你问 chatgpt 可能一下就搞定了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部