【发布时间】:2020-03-27 23:09:23
【问题描述】:
我正在尝试从包含笛卡尔坐标 x、y 和 z 的 3 个列表中计算类似半径的数量。 以下是重现我面临的问题的最小代码示例; 子类计算半径数量但返回零值。 这是什么原因,如何解决?
脚本:
# -*- coding: utf-8 -*-
from dataclasses import dataclass, field
from typing import List
@dataclass
class LoadHalo:
x: List = field(default_factory=list)
y: List = field(default_factory=list)
z: List = field(default_factory=list)
def __post_init__(self):
self.x = [1, 2, 3]
self.y = [1, 3, 5]
self.z = [1, 4, 7]
@dataclass
class BinHalo(LoadHalo):
r: List = field(default_factory=list)
def __post_init__(self):
self.r = self.modulus(self.x, self.y, self.z)
def modulus(self, *args):
"""Modulus of vector of arbitrary size."""
return sum([i ** 2 for containers in args for i in containers]) ** .5
halo = BinHalo()
print(f"halo.x: {halo.x}")
print(f"halo.r: {halo.r}")
它为 x 和 r 输出以下值:
halo.x: []
halo.r: 0.0
【问题讨论】:
-
在
self.r = self.modulus(self.x, self.y, self.z)之前添加super().__post_init__()
标签: python python-3.x oop inheritance python-dataclasses