首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >覆盖Python中的类属性

覆盖Python中的类属性
EN

Stack Overflow用户
提问于 2018-06-20 04:41:45
回答 1查看 8K关注 0票数 2

最终希望创建一个随机的音阶生成器。我正在为每种模式构建类,并希望使用主要或次要比例作为True或False boolyan作为起点。

谁能告诉我覆盖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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 05:14:07

尝试更规范的设计。首先,我修改了你的变量和属性,以反映Pythonic式的命名约定:主要的=>是主要的、规范的大小写等。

在此基础上,我编写了一个子类初始化,它调用父类的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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50936634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档