Python是一门动态语言
动态语言的定义
动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用。它是一类 在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。例如JavaScript便是一个动态语言,除此之外如 PHP 、 Ruby 、 Python 等也都属于动态语言,而 C 、 C++ 等语言则不属于动态语言。
给对象绑定(添加)属性
class Car(object): def __init__(self, Carname = None, CarMoney = None): self.Carname= Carname self.CarMoney= CarMoney C = Car("法拉利", "3000000")
在这里,我们定义了1个类Car,在这个类里,定义了两个初始属性Carname和CarMoney,但是人还有性别啊!如果这个类不是你写的是不是你会尝试访问性别这个属性呢?
>>> C.user = "技术大爆炸">>> P.user'技术大爆炸'>>>
这时候就发现问题了,我们定义的类里面没有sex这个属性啊!怎么回事呢? 这就是动态语言的魅力和坑! 这里 实际上就是 动态给实例绑定属性!
给类绑定(添加)属性
C1 = Car("悍马", "2000000") C1.user Traceback (most recent call last): File "<pyshell#21>", line 1, in <module> C1.user AttributeError: Car instance has no attribute 'user'>>>
我们尝试打印C1.user,发现报错,C1没有user这个属性!---- 给C这个实例绑定属性对C1这个实例不起作用! 那我们要给所有的Car的实例加上user属性怎么办呢? 答案就是直接给Car绑定属性!
Car.user = None #给类Car添加一个属性>>> C1 = Car("悍马", "2000000") print(C1.user)
#如果C1这个实例对象中没有user属性的话,那么就会访问它的类属性None
#可以看到没有出现异常>>>
给类绑定(添加)属性
我们直接给Car绑定user这个属性,重新实例化C1后,C1就有user这个属性了! 那么function呢?怎么绑定?
class Car(object): def __init__(self, Carname = None,money = None): self.Carname = Carname self.money = money def drive(self): print("drive") def run(self, speed): print("%s在移动, 速度是 %d km/h"%(self.Carname, speed)) C = Car("法拉利", 2400000) C.drive() driving >>> C.run() Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> C.run() AttributeError: Person instance has no attribute 'run'>>> import types C.run = types.MethodType(run, P) C.run(180) 法拉利在移动,速度是 180 km/h
既然给类添加方法,是使用类名.方法名 = xxxx,那么给对象添加一个方法也是类似的对象.方法名 = xxxx
完整的代码如下:
import types#定义了一个类 class Car(object): num = 0 def __init__(self, Carname = None, money = None): self.Carname = Carname self.age = age def drive(self): print("drive") #定义一个实例方法def run(self, speed): print("%s在移动, 速度是 %d km/h"%(self.name, speed)) #定义一个类方法@classmethoddef testClass(cls): cls.num = 100 #定义一个静态方法@staticmethoddef testStatic(): print("---static method----") #创建一个实例对象 C= Car("法拉利", 2400000) #调用在class中的方法 C.drive() #给这个对象添加实例方法 C.run = types.MethodType(run, P) #调用实例方法 C.run(180) #给Person类绑定类方法 Car.testClass = testClass #调用类方法 print(Car.num) Car.testClass() print(Car.num) #给Person类绑定静态方法 Car.testStatic = testStatic #调用静态方法 Car.testStatic()
删除属性、方法
删除的方法:
del 对象.属性名 delattr(对象, "属性名")
通过以上例子可以得出一个结论:相对于动态语言,静态语言具有严谨性!所以,玩动态语言的时候,小心动态的坑!
那么怎么避免这种情况呢? 请使用__slots__,

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
AssetManager读取assets下多张图片资源输出到ImageView动画
这里面有几个要点和环节需要注意: 1,AssetManager读取事先放置到assets目录下的原始图片资源文件,组装成Android的Bitmap数组。 文件结构如图: 2,把1中读取到的Bitmap数组每隔一个较小时间内(如25ms)不间断循环设置到ImageView里面,从而在视觉上形成一种动画效果。 代码: packagezhangphil.test;importandroid.content.res.AssetManager;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.os.Bundle;importandroid.support.annotation.Nullable;importandroid.support.v7.app.AppCompatActivity;importandroid.widget.ImageView;importjava.io.InputStream;importjava.util.concurrent.TimeUnit;publicc...
- 下一篇
使用PHP辅助快速制作一套自己的手写字体实践
一、背景 笔者以前在网上看到有民间高手制作字体的相关事迹,觉得把自己的手写字用键盘敲出来是一件很有意思的事情,所以一直有时间想制作一套自己的手写体,前几天在网上搜索了一下制作字体的方法,发现技术上并不是太难,结合了自己PHP方面的开发经验,很快的做出了一套自己的手写字体。 制作字体的流程大致是这样,首先我们需要确定那些字体需要自己写,确定了字体之后将这一批字利用工具做成一个模板,不过汉字的总量非常的多,搜索了一下大概在10万字左右,这个工程量太大,因此我们需要找出一批属于自己常用的字体(大概1700字左右),或者自己所常见到的字体,这个过程就需要用PHP来分析,分析出来之后再将其提取出来,做成模板。 在这篇文章当中笔者将完整的记录制作字体过程,其中会将用到的PHP代码公布出来,方便其他读者使用,也给自己留个备份。 二、操作概要 提取常用汉字 制作字体模板 生成字体文件 三、提取常用汉字 做一套字体的工作量是比较大的,因为汉字数量比较多,不过我们可以将我们常用的汉字提取出来,优先将这写汉字的做出来,后面不常用的字体空闲时再去累加,这里我们用到了PHP来辅助我们提取常用的汉字。 3.1 收...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境