python是动态_1.2. Python是动态语言

python是动态语言

1. 动态语言的定义

动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用。它是一类 在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。例如JavaScript便是一个动态语言,除此之外如 PHP 、 Ruby 、 Python 等也都属于动态语言,而 C 、 C++ 等语言则不属于动态语言。----来自 维基百科

2. 运行的过程中给对象绑定(添加)属性

>>> classPerson(object):def __init__(self, name = None, age =None):

self.name=name

self.age=age>>> P = Person("小明", "24")>>>

在这里,我们定义了1个类Person,在这个类里,定义了两个初始属性name和age,但是人还有性别啊!如果这个类不是你写的是不是你会尝试访问性别这个属性呢?

>>> P.sex = "male"

>>>P.sex'male'

>>>

这时候就发现问题了,我们定义的类里面没有sex这个属性啊!怎么回事呢? 这就是动态语言的魅力和坑! 这里 实际上就是 动态给实例绑定属性!

3. 运行的过程中给类绑定(添加)属性

>>> P1 = Person("小丽", "25")>>>P1.sex

Traceback (most recent call last):

File"", line 1, in P1.sex

AttributeError: Person instance has no attribute'sex'

>>>

我们尝试打印P1.sex,发现报错,P1没有sex这个属性!---- 给P这个实例绑定属性对P1这个实例不起作用! 那我们要给所有的Person的实例加上 sex属性怎么办呢? 答案就是直接给Person绑定属性!

>>>> Person.sex = None #给类Person添加一个属性

>>> P1 = Person("小丽", "25")>>> print(P1.sex) #如果P1这个实例对象中没有sex属性的话,那么就会访问它的类属性

None #可以看到没有出现异常

>>>

4. 运行的过程中给类绑定(添加)方法

我们直接给Person绑定sex这个属性,重新实例化P1后,P1就有sex这个属性了! 那么function呢?怎么绑定?

>>> classPerson(object):def __init__(self, name = None, age =None):

self.name=name

self.age=agedefeat(self):print("eat food")>>> defrun(self, speed):print("%s在移动, 速度是 %d km/h"%(self.name, speed))>>> P = Person("老王", 24)>>>P.eat()

eat food>>>

>>>P.run()

Traceback (most recent call last):

File"", line 1, in P.run()

AttributeError: Person instance has no attribute'run'

>>>

>>>

>>> importtypes>>> P.run =types.MethodType(run, P)>>> P.run(180)

老王在移动,速度是180 km/h

既然给类添加方法,是使用类名.方法名 = xxxx,那么给对象添加一个方法也是类似的对象.方法名 = xxxx

完整的代码如下:

importtypes#定义了一个类

classPerson(object):

num=0def __init__(self, name = None, age =None):

self.name=name

self.age=agedefeat(self):print("eat food")#定义一个实例方法

defrun(self, speed):print("%s在移动, 速度是 %d km/h"%(self.name, speed))#定义一个类方法

@classmethoddeftestClass(cls):

cls.num= 100

#定义一个静态方法

@staticmethoddeftestStatic():print("---static method----")#创建一个实例对象

P = Person("老王", 24)#调用在class中的方法

P.eat()#给这个对象添加实例方法

P.run =types.MethodType(run, P)#调用实例方法

P.run(180)#给Person类绑定类方法

Person.testClass =testClass#调用类方法

print(Person.num)

Person.testClass()print(Person.num)#给Person类绑定静态方法

Person.testStatic =testStatic#调用静态方法

Person.testStatic()

5. 运行的过程中删除属性、方法

删除的方法:

del 对象.属性名

delattr(对象, "属性名")

通过以上例子可以得出一个结论:相对于动态语言,静态语言具有严谨性!所以,玩动态语言的时候,小心动态的坑!

那么怎么避免这种情况呢? 请使用__slots__,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特征处理

学自 极客时间 《深度学习推荐系统实战》 特征分为两类: 类别特征(性别、地理位置、季节、天气、风格)数值型特征(年龄、收入、点击量、点击率) 类别特征经过 One-Hot 编码后放入特征向量、或者 多个的特征值采用 M…

C#整理1——进制转换

进制转换:二进制,八进制,十进制,十六进制。 (一)二进制转十进制: 1.写2 2.标指数,从右向左,从0开始依次标记 3.乘系数,一一对应。 4.相加。 例:二…

matlab打开笔记本摄像头_基于MATLAB调用电脑摄像头获取视频和图像

clear all;hwaitbar(0.1,请等待);%waitbar的作用是打开或者更新进度条 h waitbar(x,message)x表示进度条的比例长度,message是在进度条上显示的信息global vid;% global 的作用是定义全局变量vid videoinput(winvideo,1);close(h);preview(vid);%得到预览下的默认…

WIN 10 安装 Hadoop 2.7.7 + Spark 2.4.7 记录

文章目录0. 常规解压安装,并添加环境变量1. 下载并覆盖 bin 文件夹2. 使VERSION文件的clusterID一致3. 贴下单机配置4. 测试 Hadoop5. 安装Spark环境:win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.70. 常规解压安装,并添加…

ios验证邮箱格式

今天做注册界面时,用户在输入邮箱账号后,我不知道如何去辨别用户是否输入有误,我回想起最初我学过一个叫做"正则表达式"的方法, 但是不知道苹果是否能做到,果断的上网查找了一些相关资料。 最简单的就是利用…

canal mysql从库_canal中间件|数据增量同步解决方案

上一文中提到延时双删等策略实现数据一致性的时候,可能存在删除缓存失败的情况,就会出现缓存和数据库不一致的问题。为了应对删除缓存失败而导致数据不一致的问题,可以通过回溯数据库日志文件,提供一个保障的重试机制即可。流程如…

dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)

# 密度聚类DBSCAN、HDBSCANDBSCANDBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有…

Spark IDEA 编程环境配置

文章目录1. 下载资料准备2. 建立项目、添加环境设置3. 第一个 Spark 程序学自:Spark机器学习实战 https://book.douban.com/subject/35280412/ 记录一下踩过的坑: 环境:win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.7 …

Makefile 基本知识

Technorati 标签: Makefile 基本知识最常见的书写方式: CC gcc LD ld STRIP strip CFLAGS : -Os -static -DEZ_OS_LINUX CLFLAGS : -Os -static all: mainEXEC main OBJS main.o mytool1.o mytool2.o INCS mytool1.h mytool2.ha…

python考试题库程序改错_求助,程序改错

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近在学习python,其中遇到一道习题是改错的。 原代码如下 def break_words(stuff): """This function will break up words for us.""" words stuff.split( ) return words def sort_…

redis 查看key的有效期_redis中key设置过期时间

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":9,"count":9}]},"card":[{"des":"兼容Redis协议标准的、提供持久化的内存数据…

天池 在线编程 订单分配(回溯)

文章目录1. 题目2. 解题1. 题目 描述 打车派单场景, 假定有N个订单,待分配给N个司机。 每个订单在匹配司机前,会对候选司机进行打分,打分的结果保存在N*N的矩阵score,其中score[i][j]代表订单 i 派给司机 j 的分值。 假定每个订单…

2015年北京户口全攻略

最新统计数据指出 截至2013年底,北京市常住人口为2114.8万人,其中常住外来人口为802.7万人。和“北京户口”捆绑的字眼,历来是身份、福利,以至于幸福感、安全感。那么北京户口有什么好处?外来人口如何落户北京呢&#…

水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合

dada-report报表整合UReport报表设计器工具结合日常工作和学习实践,针对传统报表子站面临的问题,尝试借助UReport报表设计器解决1.可在现有工程基础上引入Ureport2报表设计器Ureport报表设计器是一个基于WEB的在线报表设计器,其具有良好的界面…

LeetCode 1844. 将所有数字用字符替换

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 s ,它的 偶数 下标处为小写英文字母,奇数 下标处为数字。 定义一个函数 shift(c, x) ,其中 c 是一个字符且 x 是一个数字,函数返回字母表中 c 后面第 x 个字符。 …

ffmpeg编译gb28181_国标GB28181对接视频流

今天抽空写下以GB28181的方式获取摄像机视频流以备后用,同时也希望能帮助到正着手开发GB28181对接视频的同学,这块的资料实在不多。今天讲的内容不涉及到平台对接,平台对接下次有时间再讲,平台对接相对更麻烦点。通过GB28181获取摄…

表格布局等

1.设置黑色细边框技巧 表格的边框0;间距1;背景黑色; 单元格 背景 白色 2.特殊字符使用软键盘 3.使用图像占位符暂时代替未制作好的图片 4.小的背景.gif 平铺变成大的长条,占用资源少 5.当设置一个单元格的高度小于一定值时,无效;因为默认里面有一个空格字符,需要在代码里将空格…

LeetCode 1845. 座位预约管理系统(set)

文章目录1. 题目2. 解题1. 题目 请你设计一个管理 n 个座位预约的系统,座位编号从 1 到 n 。 请你实现 SeatManager 类: SeatManager(int n) 初始化一个 SeatManager 对象,它管理从 1 到 n 编号的 n 个座位。所有座位初始都是可预约的。in…

unity game和scene效果不一样_不同的真石漆装饰效果也是不一样的

外墙真石漆真的是一件很好的产品,具有防火性、防水性、安全且环保、粘力强、永不褪色等特点,无疑是人们较好的选择,在很早之前就已经逐渐的取代了瓷砖和其他石材在人们心中的位置。真石漆的品种不止一种,按照装饰效果我们可以分为…

噪声产生原因_空调噪声大?啄木鸟家庭维修,看看属于哪一个问题

夏天终于要结束了,我只想安静的睡一个好觉。这个夏天中,楼上的空调每夜不休不眠的工作着,可这个空调为什么运作时的声音这么“巨大”。“轰轰轰……”,楼层都似乎和它产生了共振。而每晚的我,反反复复努力入睡&#xf…