我上课有数百种方法 我想创建一个层次结构,让我们轻松找到方法。
例如
class MyClass:
def SpectrumFrequencyStart()...
def SpectrumFrequencyStop()...
def SpectrumFrequencyCenter()...
def SignalAmplitudedBm()...
我想打电话使用:
MyClassObject.Spectrum.Frequency.Start()
MyClassObject.Spectrum.Frequency.Stop()
MyClassObject.Signal.Amplitude.dBm()
答案 0 :(得分:0)
考虑使用字典将方法映射到键(分层字典,或简单地'。'分隔键)。
另一个可能更优雅的选择是namedtuples。类似的东西:
from collections import namedtuple
MyClassObject = namedtuple('MyClassObject', ['Spectrum', 'Signal'])
MyClassObject.Spectrum = namedtuple('Spectrum', ['Frequency'])
MyClassObject.Spectrum.Frequency = namedtuple('Frequency', ['Start', 'Stop'])
MyClassObject.Spectrum.Frequency.Start = MyClass.SpectrumFrequencyStart
答案 1 :(得分:0)
这只是一个非常糟糕的设计
很明显,Spectrum
,Signal
,Frequency
(依此类推)应该是所有单独的类,远远少于&#34;数百种方法&#34;。<登记/>
我不确定MyClassObject是否实际上代表了什么,或者实际上只是一个命名空间
对象可以封装其他类的对象。例如:
class Frequency(object):
def start(self):
pass
def stop(self):
pass
class Spectrum(object):
def __init__(self):
self.frequency = Frequency()
class Amplitude(object):
def dbm(self):
pass
class Signal(object):
def __init__(self):
self.amplitude = Amplitude()
class MyClass(object):
def __init__(self):
self.spectrum = Spectrum()
self.signal = Signal()
my_class_instance = MyClass()
my_class_instance.spectrum.frequency.start()
my_class_instance.spectrum.frequency.stop()
my_class_instance.spectrum.signal.amplitude.dbm()
Python PEP 8中有一个代码格式约定,因此我在我的示例中应用了它。