[英]How to extend a class in python?
在python中你如何擴展一個類? 例如,如果我有
顏色.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
函數時,它將返回帶有字符串“extended!”的對象。 到底。 它也應該從導入中獲取 init。
假設 python 3.1
謝謝
采用:
import color
class Color(color.Color):
...
如果這是 Python 2.x,您還需要從object
派生color.Color
,使其成為新式類:
class Color(object):
...
這在 Python 3.x 中不是必需的。
class MyParent:
def sayHi():
print('Mamma says hi')
from path.to.MyParent import MyParent
class ChildClass(MyParent):
pass
ChildClass
一個實例將繼承sayHi()
方法。
另一種擴展(特別是添加新方法,而不是更改現有方法)類,甚至是內置類的方法是使用預處理器,它增加了擴展到 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,Python 做我想要它做的事情。
正如 ac 預處理器為 c 添加功能一樣,Python 預處理器也可以為 Python 添加功能。
我的預處理器的實施是一個堆棧溢出的答案太大,但對於那些誰可能會感興趣,它是這里在GitHub上。
歐盟委員會:
class menssagem:
propriedade1 = "Certo!"
propriedade2 = "Erro!"
def metodo1(self)
print(self.propriedade1)
對擴展器:
import menssagem
class menssagem2(menssagem):
menssagem1 = None #não nescessario
def __init__(self,menssagem):
self.menssagem1 = menssagem
#usando o metodo da menssagem 1
def Menssagem(self):
self.menssagem1.metodo1()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.