gpt4 book ai didi

python - 覆盖 Python 中的类属性

转载 作者:行者123 更新时间:2023-12-05 05:16:04 25 4
gpt4 key购买 nike

最终希望创建一个随机音乐音阶生成器。我正在为每种模式构建类,并希望使用大音阶或小音阶作为 True 或 False bool 值作为起点。
有人可以告诉我覆盖 Mode2 的这个属性哪里不对吗?

这是我的代码:

class Mode():

def __init__(self,title,major):
self.title = title
self.major= True


def __str__(self):
return "Title: {}, Major: {}".format(self.title,self.major)


Mode1 = Mode("Ionian", "Major")
print(Mode1)

class Mode2(Mode):
def major(self):
print(False)


Mode2 = Mode("Dorian", "Minor")
print(Mode2)

最佳答案

尝试更规范的设计。首先,我更改了您的变量和属性以反射(reflect) Pythonic 命名约定:major => ismajor、规范大小写等。

有了它,我编写了一个子类初始化,它调用父类的 init,然后进行所需的更改。不过,我对 major 参数有点困惑:您忽略它并根据所使用的类强制使用多数。无论如何,这是我摆弄您的设计的结果:

class Mode():

def __init__(self,title,ismajor):
self.title = title
self.ismajor= True

def __str__(self):
return "Title: {}, Major: {}".format(self.title,self.ismajor)


class Mode2(Mode):

def __init__(self,title,ismajor):
super().__init__(title, ismajor)
self.ismajor= False


mode1 = Mode("Ionian", "Major")
print(mode1)

mode2 = Mode2("Dorian", "Minor")
print(mode2)

输出:

Title: Ionian, Major: True
Title: Dorian, Major: False

如果我这样做,我会进一步简化:摆脱不同的模式类,并参数化一个类:

legal_mode = [ 
"Ionian",
"Dorian",
"Phrygian",
"Lydian",
"Mixolydian",
"Aeolian",
"Locrian"
]
stepping = [2, 2, 1, 2, 2, 2, 1]
major_mode = ["Ionian"]


class Mode():

def __init__(self,title):
self.title = title
self.ismajor = title in major_mode
tonic = legal_mode.index(title)
self.stepping = stepping[tonic:] + stepping[:tonic]

def __str__(self):
return "Title: {}, Major: {}".format(self.title, self.ismajor)

def scale_steps(self):
return "Half-steps: {}".format(' '.join(str(c) for c in self.stepping))

mode1 = Mode("Ionian")
print(mode1)
print(mode1.scale_steps())

mode2 = Mode("Dorian")
print(mode2)
print(mode2.scale_steps())

输出:

Title: Ionian, Major: True
Half-steps: 2 2 1 2 2 2 1
Title: Dorian, Major: False
Half-steps: 2 1 2 2 2 1 2

关于python - 覆盖 Python 中的类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com