Python学习之路-----动态特性

静态语言和动态语言

我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。

动态语言:指在程序运行期间才做类型检查的,如Python 和 Ruby。

静态类型:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++ 是静态类型语言的典型代表;

动态语言的优点:在编写代码时数量更少更简洁,把更多的精力放到业务实现逻辑上。虽然不区分类型在某些情况下会让程序变得难以理解,但整体而言,代码量越少,越专注于逻辑表达,对阅读程序越有帮助。

动态语言的缺点:无法保证变量的类型,从而在程序的运行期有可能发生跟类型相关的错误。

 

class动态添加属性和方法

在定义类时__init__方法用来声明属性并初始化各个属性值,当创建好一个对象实例后可以给这个实例单独添加一个属性。看下面的例子:

#coding=utf-8


import types

class Person():
    def __init__(self,name):
        self.__name = name

    def __str__(self):
        return 'name is:' + self.__name

    def getName(self):
        return self.__name


def run(self):
    print('++++++++++run function++++++++++++')

@staticmethod
def staticFunc():
    print('==============static ===========')

@classmethod
def clsFunc(cls):
    print('++++++++++++++++++cls+++++++++++++')


p1 = Person('zhangsan')
print(p1.getName())

p1.age = 10
print(p1.age)

p1.__addr = '北京'
print(p1.__addr)

p1.run = types.MethodType(run,p1)
p1.run()

Person.staicFunc = staticFunc
Person.clsFunc = clsFunc


Person.staicFunc()
Person.clsFunc()




结果:
zhangsan
10
北京
++++++++++run function++++++++++++
==============static ===========
++++++++++++++++++cls+++++++++++++

需要注意的是在__init__方法中以__开始的属性的是私有属性,但是即便是给实例对象添加一个__开始的属性也不再是私有属性了

给一个实例对象添加一个方法需要用到types包的MethodType方法。代码中 p1.run = types.MethodType(run,p1)的意思就是给p1对象绑定一个run方法。其中p1.run是可以换成别的字符的,但是一般来说为了便于理解都用要添加的方法名称来作为MethodType的返回值。还要注意的是在定义run方法时要默认增加一个self参数,这是为了和基本的类中定义的方法保持一致。

静态方法不属于实例对象,因此直接用类名的形式就可以添加,同理类方法也是如此。在定义类方法时也要符合基本的定义规范,即加上cls参数。

 

 

发布了76 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/shen_chengfeng/article/details/102558189