在类元素之外创建python列表的副本

2024-05-26 11:11:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,处理有限元分析(FEA)的多个节点的计算应变/变形。对于不同的正输入转矩,有多种解决方案。我想推断这些数据,并模拟负扭矩的结果。同时,原始数据会发生变化。在

由于我们没有直接改变任何原始值,我认为它必须通过引用通过函数外推FEA来访问。我一直在尝试copy.deepcopy,但在多个线程上发现这不会复制类结构。在other threads it was recommended to inherit中,但我正在努力适应我的情况。在

以下代码位于包含对象同一半径上的所有节点的类内。所有节点都在按角度排序的列表self._nodes中。每个节点都有所有扭矩水平的应变。在

class RadialNodeContainer:
    def __init__(self, radius):
        self._r = radius
        self._nodes = []
    def compute_negatives_radial_container(self): # ... see below

class Node:
    def __init__(self, node_id, x, y, z,
                 strain_0nm, strain_100nm, strain_204nm, strain_369nm):
        self._coordinate = Coordinate(x, y, z)
        self._torque_levels = [strain_0nm, strain_100nm,
                               strain_204nm, strain_369nm]
    def get_all_strains_complete(self):
        return copy.deepcopy(self._torque_levels)

class Strain:
    def __init__(self, torque_nm, exx, exy, eyy):
        self._torque = torque_nm
        self._exx = exx
        self._exy = exy
        self._eyy = eyy

导致不必要的改变原始数据的函数:

^{pr2}$

我想创建一个deepcopy的应变元素列表(Node -> self._torque_level)。最初这个列表看起来像[Strain(0Nm), Strain(100Nm), ...]。但是,我不知道我必须修改代码的哪一部分才能允许传递类实例的副本。在


Tags: self列表节点initdefclass扭矩torque
1条回答
网友
1楼 · 发布于 2024-05-26 11:11:07

详细说明。如果我有时间的话,我会详细说明这一点,而这正是运营商正在寻找的。在

我还建议对数组使用numpy而不是列表,因为mumpy要快得多。在

class Strain:
    def __init__(self, torque_nm, exx, exy, eyy):
        self._torque = torque_nm
        self._exx = exx
        self._exy = exy
        self._eyy = eyy
        self._neg = False

    def setNeg(self, neg):
        self._neg = neg

    @propery
    def torque(self):
        return _torque if not self._neg else -self.torque

    @propery
    def exx(self):
        return _exx

    @propery
    def exy(self):
        return _exy if not self._neg else -self._exy

    @propery
    def eyy(self):
        return _eyy

相关问题 更多 >