许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  ANSA二次开发基础:面向对象开发思路解析

ANSA二次开发基础:面向对象开发思路解析

阅读数 8
点赞 0
article_banner

大家学习ANSA二次开发 一般都是要解决一些实际遇到的工程问题 ,从重复性的劳动中解放出来。

但是大家有没有想过,在每一次针对不同的需求、应用场景进行ANSA二次开发时,我们所写的代码也有很多重复性的劳动。

比如说我们在两个应用场景中都需要创建一个RBE2单元:

场景一:需要用户通过选点作为RBE2单元的从节点,主节点在从节点中心

场景二:需要用户选择一个节点作为主节点,以主节点为中心半径15mm的节点作为从节点

这两个场景可以公用的代码就是使用节点创建RBE2单元的步骤。

正常的做法是写一个函数

def CreateRbe2(master=None,salve=[],name=’’,id=’’):
   代码部分:实现根据主、从节点创建RBE2单元

这个函数可以通过复制的方式循环利用,但是这样每次还要到上一次写的代码中找到,很浪费时间。并且这样写代码的可扩展性 将大打折扣。

进阶的方法可以使用面向对象开发的开发思路:

这里需要先介绍Python语言中类的概念。熟悉的同学们请自行跳过。在Python中的,类时一种面向对象编程的机制,用于描述具有相同属性的和方法的对象的集合。类定义了一组属性和方法,可以用来创建对象的模板。类定义了一组属性和方法,可以用来创建对象的模板。类可以看作一种自定义的数据类型,它可以包含多个实例,每个实例都具有相同的属性和方法。

类的定义通常包括类名、属性和方法在类定义中,我们可以定义类属性、类方法、实例属性和实例方法等。类属性是整个类的属性,可以通过类名来访问。实例属性是属于实例的属性,只能通过实例名来访问。类方法和实例方法是类中的函数,可以用来执行特定的操作。

以下是一个简单的类定义示例:

class Person:
 # 类属性
  num_of_persons = 0
 
  def __init__(self, name, age):
  # 实例属性
    self.name = name
    self.age = age
    Person.num_of_persons += 1
 
 # 实例方法
  def say_hello(self):
    print("Hello, my name is", self.name)`
 
  # 类方法
  @classmethod
  def get_num_of_persons(cls):
    return cls.num_of_persons

在上述示例中,我们定义了一个名为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():

p1 = Person("Alice", 25)
p2 = Person("Bob", 30)
p1.say_hello()
p2.say_hello()

输出结果为:

Hello, my name is Alice
Hello, my name is Bob

我们还可以通过类方法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攻城狮 ,下次见,同学们!


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空