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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL数据库在高并发下的优化方案
- Red5直播服务器,属于Java语言的直播服务器