我是 Python 的 OOP 新手。到目前为止,我一直使用 OOP 语言,如 C++、C# 和 Java。由于我必须将 C# 模块转换为 Python,因此我遇到了概念上的差异。
我有这个 C# 类关系:
internal class ChirpMeasDataClass
{
public ChirpMeasDataClass(List<AntennaLevelDataClass> AntennaLevelData, List<DiffphaseDataClass> DiffphaseData)
{
this.AntennaLevelData = AntennaLevelData;
this.DiffphaseData = DiffphaseData;
}
internal List<AntennaLevelDataClass> AntennaLevelData = new List<AntennaLevelDataClass>();
internal List<DiffphaseDataClass> DiffphaseData = new List<DiffphaseDataClass>();
}
internal class AntennaLevelDataClass
{
internal double dLevel = -10000; // [dB]
internal double dVarianzLevel = -10000; // [dB^2]
}
internal class DiffphaseDataClass
{
internal double dDiffPhase = -10000; // [°]
internal double dVarianzDiffPhase = -10000; // [°^2]
}
在 python 中直观地想到的是有这样的东西:
class AntennaLevelDataClass:
def __init__(self):
self.dLevel = -10000 # [dB]
self.dVarianzLevel = -10000 # [dB ^ 2]
class DiffPhaseDataClass:
def __init__(self):
self.dDiffPhase = -10000 # [°]
self.dVarianzDiffPhase = -10000 # [° ^ 2]
class ChirpMeasDataClass:
def __init__(self,AntennaLevelDataClass,DiffPhaseDataClass):
self.antennaLevelDataList=AntennaLevelDataClass
self.diffPhaseDataList=DiffPhaseDataClass
或类似的东西:
class ChirpMeasDataClass:
def __init__(self,antennaLevelDataClass,diffPhaseDataClass):
self.antennaLevelDataList=[]
self.diffPhaseDataList=[]
将对象列表作为类中的属性(Python 中的实例属性)的常用方法是什么?
如果你这样做
self.antennaLevelDataList=AntennaLevelDataClass
然后self.antennaLevelDataList
是一个实例变量,它的值就是那个类定义。这似乎不是很有用。
此外,您将两个类定义传递给构造函数。
使用列表(其中的内容恰好是这些类的实例)要简洁得多,而且 C++ 也使用列表,因此它主要是直接等效的。唯一的区别是,在 C++ 中,您必须声明列表内容的类型,而在 Python 中则不能。
在构造函数中,复制传入的列表的内容可能很有用,例如:
class ChirpMeasDataClass:
def __init__(self, antennaLevelData, diffPhaseData):
self.antennaLevelDataList = anntennaLevelData[:]
self.diffPhaseDataList = diffPhaseData[:]
([:]
表示整个列表的一个切片,实际上是一个浅拷贝)
关键是,否则实例属性引用与传入的相同的列表对象,如果复制一个,可能会导致意外;在 Python 中没有任何隐式复制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句