网站开发会议议程范文,中国空间站合作的17个国家,域名网址,做综合医院网站#编程教育#Python是一门动态语言#xff0c;所以它的属性都是在程序运行过程中动态引入的。一个类实例占用的内存大小也是动态变化的。这点和编译性语言是完全不同的。例如C是一门编译性语言#xff0c;它在程序运行之前需要经历编译阶段#xff0c;那么一个类实例的内存大小…#编程教育#Python是一门动态语言所以它的属性都是在程序运行过程中动态引入的。一个类实例占用的内存大小也是动态变化的。这点和编译性语言是完全不同的。例如C是一门编译性语言它在程序运行之前需要经历编译阶段那么一个类实例的内存大小在编译期间就已经确定下来了并不会在运行期动态变化。下面我们通过一个简单的例子来讲解一下python类属性的动态特点。1. class base:2. def __init__(self):3. self.__age 234. def setHeight(self, height):5. self._height height6. def getHeight(self):7. return self._height8. base_instance base()9. base_instance.setHeight(194)10.base_instance.name hello程序运行到第8行base类实例内存结构程序运行到第9行base类实例内存结构程序运行到第10行base类实例内存结构上例中第8行创建base实例此时base实例内存中只有self.__age这个属性并没有其他属性因为这个属性在类的构造函数__init__定义了所以在实例生成之时该属性也就被初始化了自然也就包含在内存中了。接下来当运行第9行时setHeight()函数被调用self_height属性被初始化此时base实例内存中才新增加了_height属性。这里__age, _height都是protected属性因为其属性名称前有下划线。其中__age更特殊一些它前面有两条下划线这是python语言实现私有成员的一种方式针对双下划线的属性在运行时会被转化成(_className__attributeName)的格式避免外部通过“.”操作符来直接获取属性值。当程序运行到第10行后base实例内存中又增加了公有的name属性这个属性在类定义中并没有而是在类外部定义的在类实例生成之后通过点操作符“.”来给类实例动态添加属性。当然我们并不鼓励最后这种做法应为它并不符合类封装性的要求。但是从这些特点我们确实可以看出python作为动态语言的灵活性。这就是Python作为动态语言的一个特性它的内存管理更加灵活。当然也有相应的缺点就是它不能像C语言那样在编译期间就能检查出程序错误只有程序运行之后才能发现错误。