在蟒蛇怎么能扩展一个类? 例如,如果我有
color.py
class Color:
def __init__(self, color):
self.color = color
def getcolor(self):
return self.color
color_extended.py
import Color
class Color:
def getcolor(self):
return self.color + " extended!"
但是,这并不工作...我想到,如果我在工作color_extended.py
,然后当我做一个颜色对象,并使用getcolor
函数,那么将返回对象以字符串“相助!” 到底。 此外,它应该gotton从进口初始化。
假设蟒蛇3.1
谢谢
使用:
import color
class Color(color.Color):
...
如果是这样的Python 2.x中,你也想获得color.Color
从object
,使之成为新式类 :
class Color(object):
...
这是没有必要在Python 3.x的
另一种方式来扩展(具体意思,添加新的方法,不改变现有的)类,甚至内置的,是使用一个预处理器,增加了延伸出的/上面Python本身的范围的能力,扩展转换为之前的Python正常的Python语法实得看到它。
我做这个延长的Python 2的str()
类,例如。 str()
是由于隐式链接到诸如引用数据的一个特别有趣的目标'this'
和'that'
。
下面是一些扩展码,其中唯一加入非Python语法是extend:testDottedQuad
位:
extend:testDottedQuad
def testDottedQuad(strObject):
if not isinstance(strObject, basestring): return False
listStrings = strObject.split('.')
if len(listStrings) != 4: return False
for strNum in listStrings:
try: val = int(strNum)
except: return False
if val < 0: return False
if val > 255: return False
return True
在此之后,我可以在进料至预处理器的代码写:
if '192.168.1.100'.testDottedQuad():
doSomething()
dq = '216.126.621.5'
if not dq.testDottedQuad():
throwWarning();
dqt = ''.join(['127','.','0','.','0','.','1']).testDottedQuad()
if dqt:
print 'well, that was fun'
预处理吃那个,吐出来的普通的Python没有的Monkeypatching和Python做什么,我打算做的事。
正如AC预处理将功能添加到C,所以也可以在Python的预处理功能添加到Python。
我的预处理器的实施是一个堆栈溢出的答案太大,但对于那些谁可能会感兴趣,它是这里在GitHub上。