音乐中的音程与调式:原理、实现与应用
1. 音程的哈希方法与异常处理
在处理音程对象时, __hash__() 方法的重载十分重要,它能为对象创建哈希码。为了能在字典或集合中使用类的实例,确保类类型具有可靠的 “可哈希性” 是关键。对于 Interval 类的默认实现,若不进行处理,在字典或集合中使用会出现问题。定义哈希码计算需遵循以下规则:
1. 在实例的生命周期内,哈希码值不能改变。
2. 符合相等定义的实例必须具有相同的哈希码值,即 __eq__() 和 __hash__() 方法需保持一致。
3. 哈希码值应基于不可变的值。
基于规则 3,对音程的操作应返回新的独立实例,而不是改变音程实例的半音距离、全音距离或音程类型。代码中使用音程实例的文本表示来生成哈希码,示例代码如下:
def __hash__(self):
return hash(str(self))
在音程相加时,可能会出现闭合性违规的情况,即两个音程无法相加。在代码中,可通过抛出异常来处理这种情况。例如,在 add_intervals() 函数中:
if (b_dc, b_ct) not in Interval.INTERVAL_MAP:
raise Exception('Illegal Addition {0} + {1} ({2
超级会员免费看
订阅专栏 解锁全文
43

被折叠的 条评论
为什么被折叠?



