python中的类
Python语言里没有直接的ADT(Abstract Data Type)定义,实现ADT可以采用很多不同的技术。最自然的一种技术是利用class定义实现抽象数据类型。实际上,python语言把内置类型都看作类。在建立这种抽象时,人们不希望暴露其实现的内部细节。由于隐藏抽象的内部信息在软件领域中意义重大,有些编程语言为此提供了专门机制。python没有专门服务于这种需求的机制,只能依靠一些编程约定 。
首先,人们约定在一个类的定义里面,由下划线开头的属性名都当做内部使用的名字,不应该在这个类之外使用。另外,python对类定义里以两个下划线_开头(但不以两个下划线结尾)名字做了特殊处理,使得在类定义之外不能直接使用这个名字访问。例如定义有理数类:
class Rational:
@staticmethod
def _gcd(m, n):
if n == 0:
m, n = n, m
while m != 0:
m, n = n % m, m
return m
def __int__(self, num, den = 1):
if not isinstance(num, int) or not isinstance(den, int):
raise TypeError
if den == 0:
raise ZeroDivisionError
sign = 1
if num < 0:
num,