在学python之前一直把动态语言和静态语言的区别理解为要写int char这样的预定义类型的就是静态语言,而可以不用事先声明数据类型的则是动态语言,直到看到了这个:

python是动态语言,实例创建出来之后仍然可以被绑定其他属性,即使类中没有规定。Java/C#是静态语言,实例创建出来后属性就固定了,有什么属性是类规定好了的,不允许改变。

当一个Student类创建之后,它的内部的字段属性只有name和score,如果在java(静态语言)中,是无法使用bart.age这样的方式给student这个类动态的添加一个字段的(可以使用继承的方式扩展一个新的含有age属性的student2类,java可以在运行时修改类中属性的值,但是无法在运行时修改student这个类中的属性的,也就是不能给它新增字段或者删掉字段):可以看到age属性为红色,代表异常,

所以个人认为动态语言和静态语言本质上的区别在于,能否在运行时“绑定”新的属性,而提前声明数据类型个人觉得属于强类型和弱类型的差别,即隐式转化。

同时动态语言还存在一种“鸭子类型”,即动态语言对继承体系要求不严格:一个对象只要“看起来像鸭子,走起路来像鸭子”那么它就可以被看作是鸭子

python:(python中的继承是直接将父类当作参数传给子类)

class Student():

def grade(self):

print('哇要考试啦!')

class goodStudent(Student):

def grade(self):

print('哇满分!')

class badStudent(Student):

def grade(self):

print('哇零分')

class Pig():

def grade(self):

print('精品猪肉!')

def kind(student):

student.grade()

student = Student()

good = goodStudent()

bad = badStudent()

pig = Pig()

kind(student)

kind(good)

kind(bad)

kind(pig)

Java:

可以看到,静态语言(java)是没有python那样的鸭子类型的特性的

以上观点部分为个人观点以及部分引自廖雪峰python教程及知乎相关话题,python代码则引自python教程,java代码为自己手打,如有错漏之处,希望大家能够指出,互相探讨,共同进步。                  ----2018.2.24

经过几天的思考,发现,其实把动静态语言归纳为需要提前声明类型也是有道理的,因为它们的外在表现确实是这样,这里要明确一个概念就是当我们定义一个class的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和python自带的数据类型,比如str,list,dict没什么两样:

a = list() # a是list类型

b = Animal() # b是Animal类型

c = Dog() # c是Dog类型

所以python可以直接把pig传入kind方法(即便kind方法已经声明了参数类型为student),但是因为是动态语言,所以在编译时不会报错,并且在运行时,发现pig也有grade这个方法("鸭子类型"),所以能够正常运行,如果pig没有grade这个方法则在运行的时候会报错                                       更新时间--2018.2.26

报错pig中没有grade这个属性(方法)

python是静态语言还是动态语言_Python笔记--动/静态语言部分区别相关推荐

  1. python语言的类型是_Python到底是强类型语言,还是弱类型语言?

    0.前言 我在上一篇文章中分析了 的话题,在文章发布后,有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Python 到底是不是强类型语言?我认为是,而 ...

  2. python里两个等号代表什么_Python 到底是强类型语言,还是弱类型语言?

    以下文章来源于 Python 猫 ,作者豌豆花下猫 作者 | 豌豆花下猫 来源 | Python 猫 前言 我在上一篇文章中分析了为什么 Python 没有 void 类型的话题,在文章发布后,有读者 ...

  3. 64.多态性实现机制—静态分派与动态分派(方法解析、静态分派、动态分派、单分派和多分派)

    64.多态性实现机制-静态分派与动态分派 64.1.方法解析 64.2.静态分派 64.3.动态分派 64.4.单分派和多分派 64.多态性实现机制--静态分派与动态分派 64.1.方法解析 Clas ...

  4. 静态路由与动态路由的优先级_静态路由基础知识

    静态路由是指由管理员手动配置和维护的路由.静态路由配置简单,并且无需像动态路由那样占用路由器的CPU资源来计算和分析路由更新. 静态路由的缺点在于,当网络拓扑发生变化时,静态路由不会自动适应拓扑改变, ...

  5. js html 数据动态统计图,jquery实现动静态条形统计图

    下图为jquery实现静态条形统计图,在选择题统计中用的比较多. 思路:前台JS实现动态数据效果,后台可以拼接字符串或者用JSON加载数据 代码: 青苹果条形统计 var data="{ro ...

  6. 贪吃蛇统计分数的c语言代码,C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!...

    接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...

  7. 静态ip ssh无法登录_识别动静态IP的技巧

    动态IP,又称DHCP上网,即自动获取IP上网.动态IP这种上网方式,连接网络时即可自动获取IP地址来正常上网.在未使用路由器的情况下,只需要把宽带网线连接到电脑上,电脑上的IP地址设置为自动获得,电 ...

  8. python脚本语言是什么意思_python为什么是脚本语言

    python的命名起源于一个脚本screenplay,每次运行都会使对话框逐字重复.由著名的"龟叔"Guido van Rossum在1989年圣诞节期间编写. Python为我们 ...

  9. python和c语言哪个效率高_Python运行效率优于C语言的功能简介

    C语言和Python运行效率你在实际应用的过程中前者与后者你更喜欢应用那个?本文要介绍的是C语言与Python运行效率对比,突出前后者的不同以及在相关应用过程中的相关功能的介绍.以下是内容介绍. Py ...

最新文章

  1. 第一届河北工业大学程序设计竞赛校赛 【个别题的解析】
  2. 微信端 a 链接无法跳转
  3. Error: Could not find or load main class CLASS的解决方法
  4. 犀牛重建曲面_犀牛建模渐消面处理
  5. 2017帝都租房攻略:昌平通州租金涨幅高达25%
  6. 感谢CSDN赠送的2021年新年礼物
  7. WebIDE sandbox
  8. [vue] 怎么配置使vue2.0+支持TypeScript写法?
  9. scanf 用法大全
  10. 那些辞职考公的程序员,最后都怎么样了?
  11. ZYNQ PS端输出不准确时钟供PL使用
  12. JavaScript命名冲突不可避免?
  13. java 序列化,流,二进制的区别和联系
  14. Linux 环境下maven安装配置
  15. 使用深度学习和物理约束求解偏微分方程
  16. java 课设 商品库存管理系统
  17. python角谷猜想递归实现_第三周函数的递归---编程作业: 递归编程练习
  18. 433lora手持机|手持数据采集终端|lora模块手持PDA
  19. 建议你放弃——四川大学经验贴
  20. 个人学习之C++ 头文件.h与.cpp

热门文章

  1. MySQL 1045登录失败
  2. JAVA操作Excel之阿里巴巴EasyExcel
  3. Windows Live Mail不能发送图片附件的2种解决方法
  4. 设计一个表示学生的类:Student,该类的属性包括name、age、scores(包含语文、数学和英语三科成绩,每科成绩的类型为整数),此外该类还有3个方法。
  5. ubuntu下安装idea
  6. (C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #121. 买卖股票的最佳时机
  7. Katalon(自动化测试工具)教程--Mobile APP 测试脚本的录制
  8. html引入vue.js DES加密、解密
  9. pytorch中的二分类及多分类交叉熵损失函数
  10. npm更换最新淘宝镜像