大家学习ANSA二次开发一般都是要解决一些实际遇到的工程问题,从重复性的劳动中解放出来。
但是大家有没有想过,在每一次针对不同的需求、应用场景进行ANSA二次开发时,我们所写的代码也有很多重复性的劳动。
比如说我们在两个应用场景中都需要创建一个RBE2单元:
n 场景一需要用户通过选点作为RBE2单元的从节点,主节点在从节点中心
n 场景二需要用户选择一个节点作为主节点,以主节点为中心半径15mm的节点作为从节点
这两个场景可以公用的代码就是使用节点创建RBE2单元的步骤。
正常的做法是写一个函数
def CreateRbe2(master=None,salve=[],name=’’,id=’’): 代码部分:实现根据主、从节点创建RBE2单元
这个函数可以通过复 制的方式循环利用,但是这样每次还要到上一次写的代码中找到,很浪费时间。并且这样写代码的可扩展性将大打折扣。
进阶的方法可以使用面向对象开发的开发思路:
这里需要先介绍Python语言中类的概念。熟悉的同学们请自行跳过。在Python中的,类时一种面向对象编程的机制,用于描述具有相同属性的和方法的对象的集 合。类定义了一组属性和方法,可以用来创建对象的模板。类定义了一组属性和方法,可以用来创建对象的模板。类可以看作一种自定义的数据类型,它可以包含多个实例,每个实例都具有相同的属性和方法。
类的定义通常包括类名、属性和方法在类定义中,我们可以定义类属性、类方法、实例属性和实例方法等。类属性是整个类的属性,可以通过类名来访问。实例属性是属于实例的属性,只能通过实例名来访问。类方法和实例方法是类中的函数,可以用来执行特定的操作。
以下是一个简单的类定义示例:
在上述示例中,我们定义了一个名为Person的类,它具有一个类属性num_of_persons,表示创建的Person实例的数量。在构造方法__init__()中,我们定义了两个实例属性name和age,并将类属性num_of_persons加1。实例方法say_hello()用于打印一个问候语,其中包含实例属性name的值。类方法get_num_of_persons()返回类属性num_of_persons的值。
使用该类,我们可以创建多个Person的实例,并访问它们的属性和方法。例如,以下代码创建了两个Person实例p1和p2,并调用了它们的实例方法say_hello():
输出结果为:
我们还可以通过类方法get_num_of_persons()来获取Person实例的数量。例如,以下代码输出了当前创建的Person实例的数量:
print(Person.get_num_of_persons()) 输出结果为:2
了解了Python类属性的概念后,我们就可以把一个常用的功能封装成一个单独的模块,然后每次使用前通过import导入即可,我们只需要记住这个类的输入、输出、属性、类方法即可,最好在创建前进行注释标注。比如上述我们提到的创建RBE2单元,我们就可以这样进行封装。
我这里只是实现了根据输入的主、从节点进行RBE2单元的创建。可以看到我还预留了输入id以及名字的接口,后期需要可以直接修改。
if __name__ == '__main__':后的代码为测试代码,只有在执行当前.py文件时才会执行。
那么怎么灵活使用上述封装的功能呢?
首先把这个文件存为CreateRbe2.py文件,假设你现在要在另外一个.py文件中用到这个创建RBE2单元的功能,那你只需要如下图这样子将这个模块使用import导入进来:
CreateRbe2.CreateRbe2(nodes[0],nodes[1:]).create()中第一个“CreateRbe2”是.py文件(库)的名称,第二个“CreateRbe2”是模块的名称。因为一个库中可以有很多个模块,所以需要通过库.模块的方式进行精确导入。
如果我们将大部分常用的功能都进行封装,那么你的代码就会是下面这种结构:
每一个插件及功能都是一个文件,主文件中的代码量会变少,方便开发;在有新的功能需要实现,并且是现有功能的补充时候,我们还可以是使用类的继承属性,举个例子:
如果想在上述创建RBE2的功能上增加一个返回RBE2主节点位置的功能,我们只需要:
是不代码量就简洁了很多。
好了以上就是关于ANSA二次开发中“面向对象编程”的一个小技巧。
我是ANSA攻城狮,下次见,同学们!