如何在python中延长一堂课?

问题描述 投票:0回答:5
在Python中,您如何扩展课程?例如,如果我有

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
函数时,它将用字符串“扩展!”返回对象。到底。此外,它也应该使Init来自Import。
航空python3.1

使用:
python class interface
5个回答
141
投票
import color class Color(color.Color): ...

如果这是Python 2.x,您也想从
color.Color
衍生出来,以使其成为

新风格的类别:

object
python3.x.中没有必要

class Color(object):
    ...

class MyParent: def sayHi(): print('Mamma says hi')

然后,

23
投票
的实例将继承
ChildClass
方法。

动物来扩展(特别是含义,添加新方法,而不是更改现有方法),甚至是内置的类别,即使用一个预处理器,以增加扩展的能力,以超出/之上/高于Python本身的范围,从而转换扩展名在Python真正看到它之前,正常的Python语法。 例如,我这样做是为了扩展Python 2的

sayHi()
类。
str()
是一个特别有趣的目标,因为与引用数据的隐含链接,例如

str()

5
投票
'this'

。 there是一些扩展代码,其中唯一添加的非Python语法是

'that'

位:

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
预处理器可以吃,吐出正常的python而不构成怪物,而python可以做我打算做的事情。

作为C预处理器的JUST添加了C的功能,Python预处理器也可以向Python添加功能。

我的预处理器实现太大了,无法进行堆栈溢出答案,但是对于那些可能有兴趣的人来说,它是github上的

Herey。

我像这样使用它。
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'

延伸
class menssagem: propriedade1 = "Certo!" propriedade2 = "Erro!" def metodo1(self) print(self.propriedade1)

在大多数情况下,我更喜欢导入类并将其分配给单独的变量。在下面的示例中,我将

import menssagem class menssagem2(menssagem): menssagem1 = None #não nescessario not necessary def __init__(self,menssagem): self.menssagem1 = menssagem #call first class method #usando o metodo da menssagem 1 def Menssagem(self): self.menssagem1.metodo1()

视为在单独的

MetaInit

类中导入的插件。运行

Worker脚本,我可以通过简单地导入我的工作类来访问插件main.py

方法。 below是示例脚本内容。请注意,

0
投票
是本地目录。

main.py

MetaInit

__worker_.py

0
投票

from _worker_ import Worker objWorker = Worker("_config_.json") objWorker.mIA.dtMetaInit("xoxo")

Metainit/__ Init __.py
from MetaInit import ObjMetaInitApi

class Worker():
    def __init__(self,strConfigFile):
        self.mIA=ObjMetaInitApi()
后面的输出是

class ObjMetaInitApi: def __init__(self): print("Finished ObjMetaInitApi init") def dtMetaInit(self, strV): print("we have reached dtMetaInit - ",strV)

的输出
main.py

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.