将属性从 parent 传递到 child class

Passing an attribute from a parent to a child class

我正在尝试创建一个名为 Beams 的 child class,它是 Elements class 的扩展。后者计算元素的长度并将其存储为 Elements class 的属性。我想以某种方式将 length 传递给 child class。正确的做法是什么?

请注意:我的代码没有直接实例化 Elements class。相反,它的属性通过继承在 Beam class 的实例中使用。


class Elements:

    def __init__(self,number,start_node,end_node,e_modulus,cs_area):

        self.number = number
        self.start_node = start_node
        self.end_node = end_node
        self.e_modulus = e_modulus

        d_x = end_node.x_glob - start_node.x_glob
        d_y = end_node.y_glob - start_node.y_glob

        self.length = mt.sqrt(d_x**2 + d_y**2)
        self.alpha = mt.atan2(d_y, d_x)

        r1 = mt.cos(self.alpha)
        r2 = mt.sin(self.alpha)

        self.rot_matrix = np.array([[r1,  r2, 0, 0,   0,  0],
                                   [-r2, r1, 0, 0,   0,  0],
                                   [0,   0,  1, 0,   0,  0],
                                   [0,   0,  0, r1,  r2, 0],
                                   [0,   0,  0, -r2, r1, 0],
                                   [0,   0,  0, 0,   0,  1]])


class Beam(Elements):

    def __init__(self,number,start_node,end_node,e_modulus,cs_area,second_mom_of_area):
        super().__init__(number,start_node,end_node,e_modulus,cs_area)
        self.second_mom_of_area = second_mom_of_area


        k1 = (e_modulus*cs_area)/length
        k2 = (12*e_modulus*second_mom_of_area)/(length**3)
        k3 = (6*e_modulus*second_mom_of_area)/(length**2)
        k4 = (4*e_modulus*second_mom_of_area)/(length)
        k5 = (2*e_modulus*second_mom_of_area)/(length)

        self.loc_stiff_matrix = np.array([[ k1,   0,   0, -k1,   0,   0],
                                         [  0,  k2,  k3,   0, -k2, -k3],
                                         [  0,  k3,  k4,   0, -k3,  k5],
                                         [-k1,   0,   0,  k1,   0,   0],
                                         [  0, -k2, -k3,   0,  k2,   0],
                                         [  0,  k3,  k5,   0, -k3,  k4]])

您在父项 class 中定义的所有内容都由子项继承,除非在子项的主体中明确修改,否则它们可以作为属性直接访问。

你的情况:

beam = Beam(**kwargs)

print(beam.length)
# or
print(getattr(beam, "length"))

应该可以。