鸟瞰 ABAQUS/CAE 的 PYTHON 二次开发,“面向对象”该如何理解 ?
鸟瞰 ABAQUS/CAE 的 PYTHON 二次开发,“面向对象”该如何理解 ?
如果你尝试去了解或学习ABAQUS/CAE 的PYTHON 二次开发,你就会被告知:“ABAQUS/CAE 的 PYTHON 二次开发是面向对象编程的。”
这篇文字就带各位从“面向对象编程”这个角度来初步认识一下ABAQUS/CAE 的 PYTHON 二次开发。
换个表达去理解
首先,“对象”可以换成“实例”这个词语来表达,可以朴素的理解为“实际的例子”、“实实在在的例子”。
过去面向过程编程,变量都是一个一个松散的进行定义,比如为了描述下面这个边长20cm的立方体模型,会像这样定义变量和函数来描述它:
# L长度 W宽度 H高度 L = 20.0 W = 20.0 H = 20.0 # 这个函数用来计算体积 def volume (L, W, H): V = L * W * H return V
而面向对象编程会这样来描述它:
# 边长变量 和 计算体积的函数 被包含在 model 这个类型里面 class model (object): def __init__(self, L, W, H): self.L = L self.W = W self.H = H def volume (self): return self.L * self.W * self.H
两种方式的区别是非常明显的。如果有两个尺寸不同的立方体模型,前一种方法为了区分不同立方体模型的参数,也许会给参数定义下标,L1, W1, H1, L2, W2, H2。而后面的方法只需要给每个立方体模型命名,比如立方体分别命名为 model1、model2,那他们的边长、体积就可以这样来表达了:
model1.L, model1.W, model1.H, model1.volume()
model2.L, model2.W, model2.H, model2.volume()
含义非常明确,参数不会混乱,各个参数不需要再重新定义了。
下面是 python源代码实际运行的截图:
所以,“对象”作为“实实在在的例子”,它的“实实在在”就在于把反映共同特征的信息(变量、函数)聚拢在一起,放到“class”(类型)里面。这种方式有个专业的术语来表达:封装。放到“class”里面的变量称为“成员变量”或“属性”,放到“class”里面的函数称为“成员函数”或“方法”。
ABAQUS/CAE 里面的“对象”
其实 ABAQUS/CAE 里面的“对象”十分显而易见。
界面左侧的树形菜单(下图)就是一个具象的“对象”,它们是自下而上一级一级被包含的,其实就是类似上面的例子一样被“封装”了起来。每次在界面上建模就是往这个“对象里面“填进”各种数值、信息,而python 二次开发就是直接用代码的方式来完成往“对象”里面“填进”各种数值、信息的过程。