添加方便的静态/类方法,而无需删除或破坏现有实现

时间:2012-07-01 01:27:33

标签: python static class-method

我正在掌握OOP范例,并且我希望改进可扩展和可重用代码的艺术。让我们说理论上我有一个广泛使用的实用程序类的Python库。我想为特定的类添加一些带有相同代码的方便的静态方法,以便于使用,但我不想破坏我对库的现有使用。实现和命名新类方法的推荐方法是什么?我有几个猜测如下:

1)使用重载的方法名称来保持清晰度? Python不是一个很好的例子,但在Java等其他语言中?例如:

class Cat(object):
    def __init__(self, name):
        self.name = name

    def meow(self):
        meow(self.name)

    @staticmethod
    def meow(name): # <-- Granted, Python doesn't overload method names
        print "{} meowed cutely!".format(name)

2)使用不同的,可能不那么语义的静态方法名称?旧名称无法更改,因此......在我看来,对于大型项目来说,这可能会失控,只有一堆非语义名称只能用于同一方法的静态版本。例如:

class Cat(object):
    def __init__(self, name):
        self.name = name

    def meow(self):
        meowFrom(self.name)

    @staticmethod
    def meowFrom(name): # Different, possibly less semantic name
        print "{} meowed cutely!".format(name)

我认为完全复制代码是一个坏主意。这是要走的路?还是有一些更好的设计模式? Python特有的东西我不知道?我想确保我的代码在将来不值钱;并建立一些对未来项目具有广泛性的个人图书馆。

1 个答案:

答案 0 :(得分:1)

您可以向函数添加可选参数和关键字参数,而不会破坏它的现有用途。例如,您可以在末尾添加protocol = old参数以选择要使用的行为,在没有显式参数的情况下,旧行为是默认行为。如果你想保留相同的功能名称,这是最好的选择,但如果你多次这样做,它会很快变得笨拙。