设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

Go学习笔记 - 关于Java、Python、Go编程思想的不同

2013-8-5 15:45| 发布者: 红黑魂| 查看: 8472| 评论: 2|来自: 博客园

摘要: 看了两周七牛团队翻译的《Go语言程序设计》,基本上领略到了Go语言的魅力。学习一个语言,语法什么的任何人都是很容易学会,难就难在充分领略到这门编程语言的思想。 面向对象 喂!屌丝码农该找个对象了。 除去Java ...

Python 思想

python无以言状的灵活,你就是上帝!

这里我们只要创建一个根类,其他的东西,随时随地,想加就加。

class Human:
"""
人
"""
def __init__(self):
    self.__name = ""
    self.__sex = ""

def setName(self, name):
    self.__name = name

def getName(self):
    return self.__name

def setSex(self, sex):
    self.__sex = sex

def getSex(self):
    return self.__sex

name = property(getName, setName) # 就像java中的POJO setter以及getter
sex = property(getSex, setSex) # 就像java中的POJO setter以及getter

下面就边执行边丰满它

lilei = Human()
lilei.sex = "男"
lilei.name = "李磊"
print "%s %s 出场" % (lilei.name, lilei.sex)

hanmeimei = Human()
hanmeimei.sex = "女"
hanmeimei.name = "韩梅梅"
print "%s %s 出场" % (hanmeimei.name, hanmeimei.sex)


# Pee的方法
def doPee(self, how):
print "%s %s %s撒尿" % (self.name, self.sex, how)

Human.doPee = doPee #动态绑定方法

lilei.doPee("站着")
hanmeimei.doPee("蹲着")

# 学习的方法
def doLearning(self, learn):
print "%s: %s" % (self.name, learn)

Human.doLearning = doLearning #动态绑定方法

lilei.doLearning("How are you?")
lilei.doLearning("I'm fine, thank you!")

_________________________________________________
output: 李磊 男 出场
output: 李磊韩梅梅 女 出场
output: 李磊 男 站着撒尿
output: 韩梅梅 女 蹲着撒尿
output: 李磊: How are you?
output: 李磊: I'm fine, thank you!

python中一切对象都是鸭子类型,何谓鸭子类型?只要会"嘎嘎"叫的东西都是鸭子。应用到上面场景中,只要具有学习和 撒尿方法的对象都可以看作人了。从另一方面说,我对于鸭子只关注它是否能够"嘎嘎"叫,如果能,不管是什么东西,那么它就是一只鸭子; 对于人,只关注他们是否能撒尿与学习,既能撒尿又能学习,他凭什么就不是人?

python和java就好像阴阳之替的东方玄学之余西方哲学。

这是所有的python代码

test.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Human:
"""
人
"""
def __init__(self):
    self.__name = ""
    self.__sex = ""

def setName(self, name):
    self.__name = name

def getName(self):
    return self.__name

def setSex(self, sex):
    self.__sex = sex

def getSex(self):
    return self.__sex

name = property(getName, setName) # 就像java中的POJO
sex = property(getSex, setSex) # 就像java中的POJO


if __name__ == '__main__':

lilei = Human()
lilei.sex = "男"
lilei.name = "李磊"
print "%s %s 出场" % (lilei.name, lilei.sex)

hanmeimei = Human()
hanmeimei.sex = "女"
hanmeimei.name = "韩梅梅"
print "%s %s 出场" % (hanmeimei.name, hanmeimei.sex)


# Pee的方法
def doPee(self, how):
    print "%s %s %s撒尿" % (self.name, self.sex, how)

Human.doPee = doPee #动态绑定方法

lilei.doPee("站着")
hanmeimei.doPee("蹲着")

# 学习的方法
def doLearning(self, learn):
    print "%s: %s" % (self.name, learn)

Human.doLearning = doLearning #动态绑定方法

lilei.doLearning("How are you?")
lilei.doLearning("I'm fine, thank you!")

Go 思想

面向对象之于Go,没有继承这么一说,更像是C与Python的结合体,并把鸭子类型发扬到极致。

接口(interface)就好比是一只"鸭子",而interface结构体内包裹的方法就是这只"鸭子"所具有的功能,Go中,接口可以描述为: 具有这些功能的家伙就是这只"鸭子"

方法(func)被定义在结构(类/struct)之外,被绑定于这个结构之上,可以描述为: 这是它的功能 ,当一个struct中的一些方法都包含在某个interface中时,我们就说: 啊哈,这就是那只"鸭子",哪怕它多长了几条腿(func),它也是啊

关于继承,没有,go中虽然内嵌很像继承但不是。继承是一脉相传,而go的内嵌表达出你中有我我中有你的情怀,需要用到某个struct的功能了,那么就对它说 你就是我的一部分

struct、interface、func 这些几乎就是Go面向对象的全部了,如此简洁。

package main

import (
    "fmt"
)

// 接口 学生
type Student interface {
    learningEnglish(string)
}

// 结构
type Human struct {
    Name string
    Sex  string
}

// 学习英语方法,绑定于Human
func (student Human) learningEnglish(learning string) {
    fmt.Printf("%s: %s\n", student.Name, learning)
}

// 结构 男人
// go没有继承这个概念,这里是嵌入
type Male struct {
    Human "嵌入字段"
}

type Female Male

// 方法, 绑定到了Human结构
func (this Human) Pee(how string) {
    fmt.Printf("%s %s %s撒尿\n", this.Name, this.Sex, how)
}

// 学习
func doLearning(learning Student, learing string) {
    learning.learningEnglish(learing)
}

// Pee
func doPee(human interface {}) {
    switch sex := human.(type){
    case Male:
        sex.Pee("站着")
    case Female:
        sex.Pee("蹲着")
    }
}

func main() {
    lilei := Male{}
    lilei.Name = "李雷"
    lilei.Sex = "男"
    fmt.Printf("%s %s 出场\n", lilei.Name, lilei.Sex)

    hanmeimei := Female{}
    hanmeimei.Name = "韩梅梅"
    hanmeimei.Sex = "女"
    fmt.Printf("%s %s 出场\n", hanmeimei.Name, hanmeimei.Sex)

    doPee(lilei)
    doPee(hanmeimei)

    doLearning(lilei, "How are you?")
    doLearning(hanmeimei, "I'm fine, thank you!")
}

摆脱C++/Java/Python等思想的桎梏,才能领略Go的魅力

博客园:http://www.cnblogs.com/hangxin1940/p/3231649.html

酷毙

雷人
2

鲜花

鸡蛋

漂亮

刚表态过的朋友 (2 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部