如何把网站做的和别人一样,自适应网站建设哪家便宜,0基础学网站设计,快站淘客中转页动态编程语言是高级程序设计语言的一个类别#xff0c;在计算机科学领域已被广泛应用。它是一类在运行时可以改变其结构的语言#xff1a;例如新的函数、对象、甚至代码可以被引进#xff0c;已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力#xff0…动态编程语言是高级程序设计语言的一个类别在计算机科学领域已被广泛应用。它是一类在运行时可以改变其结构的语言例如新的函数、对象、甚至代码可以被引进已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力例如JavaScript便是一个动态语言除此之外如 PHP 、Ruby 、Python等也都属于动态语言而 C、C 、Java等语言则不属于动态语言。在这里我们以Python举例进行说明1. 运行的过程中给对象绑定(添加)属性 classPerson(object):def __init__(self, name None, age None):self.namenameself.ageage P Person(小明, 24)在这里我们定义了1个类Person在这个类里定义了两个初始属性name和age但是人还有性别啊如果这个类不是你写的是不是你会尝试访问性别这个属性呢 P.sex maleP.sexmale这时候就发现问题了我们定义的类里面没有sex这个属性啊怎么回事呢 这就是动态语言的魅力和坑 这里实际上就是动态给实例绑定属性2.运行的过程中给类绑定(添加)属性 P1 Person(小丽, 25)P1.sexTraceback (most recent call last):File, line 1, in P1.sexAttributeError: Person instance has no attributesex我们尝试打印P1.sex发现报错P1没有sex这个属性给P这个实例绑定属性对P1这个实例不起作用 那我们要给所有的Person的实例加上sex属性怎么办呢 答案就是直接给Person绑定属性 Person.sex None #给类Person添加一个属性 P1 Person(小丽, 25) print(P1.sex) #如果P1这个实例对象中没有sex属性的话那么就会访问它的类属性None #可以看到没有出现异常3. 运行的过程中给类绑定(添加)方法我们直接给Person绑定sex这个属性重新实例化P1后P1就有sex这个属性了 那么function呢怎么绑定 classPerson(object):def __init__(self, name None, age None):self.namenameself.ageagedefeat(self):print(eat food) defrun(self, speed):print(%s在移动, 速度是 %d km/h%(self.name, speed)) P Person(老王, 24)P.eat()eat foodP.run()Traceback (most recent call last):File, line 1, in P.run()AttributeError: Person instance has no attributerun importtypes P.run types.MethodType(run, P) P.run(180)老王在移动,速度是180 km/h那么在Python中最常见的是三类方法分别是实例方法类方法和静态方法这里我们分别添加一下importtypes#定义了一个类classPerson(object):num0def __init__(self, name None, age None):self.namenameself.ageagedefeat(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()执行结果4. 运行的过程中删除属性、方法删除的方法:del 对象.属性名delattr(对象, 属性名)通过以上例子可以得出一个结论相对于动态语言静态语言具有严谨性所以玩动态语言的时候小心动态的坑那么怎么避免这种情况呢 请使用__slots__。5. __slots__动态语言可以在运行的过程中修改代码。静态语言编译时已经确定好代码运行过程中不能修改。如果我们想要限制实例的属性怎么办比如只允许对Person实例添加name和age属性。为了达到限制的目的Python允许在定义class的时候定义一个特殊的__slots__变量来限制该class实例能添加的属性 classPerson(object):__slots__ (name, age) P Person() P.name 老王 P.age 20 P.score 100Traceback (most recent call last):File, line 1, in AttributeError: Person instance has no attributescore使用__slots__要注意__slots__定义的属性仅对当前类实例起作用对继承的子类是不起作用的。In [67]: classTest(Person):...:pass...:In [68]: t Test()In [69]: t.score 100