2024-04-25 00:50:24 发布
网友
我在Python中有一些面向对象的代码,在Python中,一些类被扩展以提供缺少的自定义代码位(laTemplate Method pattern,但也有变量),这些代码将仅由超级类使用,而不是由使用它们的客户机代码使用。
对于这样的抽象(或者说是单调的,因为它们在超级类中的实现要么是pass,要么是引发一个NonImplemented异常)方法和属性,是否有任何样式约定?
pass
NonImplemented
我一直在浏览PEP-0008,它只提到了在private成员前面加下划线,这些成员不打算被子类使用。
这些方法实际上没有命名约定,因为它们在被重写时将具有相同的名称。否则他们不会被推翻!我认为让方法被重写做一些琐碎的事情,并相应地记录下来,就足够了:
class MyClass: def aMethod(): '''Will be overridden in MyDerivedClass''' pass
如果您有一个将被重写的非平凡方法,但仍希望能够访问基本版本,那么您在问题中提到的名称管理非常有用。有关更多信息和示例,请参见the documentation。
首先,我认为你这样说是错的:
about prepending underscore to private members not intended to be used by subclasses.
实际上,用下划线在方法/属性前面加下划线是一种python约定,这意味着不应该在类(及其子类)之外访问此方法/属性,而且我想您忘记了阅读用于使方法/属性无法重写的双下划线。
class Foo(object): def __foo(self): print "foo" def main(self): self.__foo() class Bar(Foo): def __foo(self): print "bar" bar = Bar() bar.main() # This will print "foo" and not "bar".
另一种声明存根方法的方法是使用abc.ABCMeta和abc.abstractmethod。
这些方法实际上没有命名约定,因为它们在被重写时将具有相同的名称。否则他们不会被推翻!我认为让方法被重写做一些琐碎的事情,并相应地记录下来,就足够了:
如果您有一个将被重写的非平凡方法,但仍希望能够访问基本版本,那么您在问题中提到的名称管理非常有用。有关更多信息和示例,请参见the documentation。
首先,我认为你这样说是错的:
实际上,用下划线在方法/属性前面加下划线是一种python约定,这意味着不应该在类(及其子类)之外访问此方法/属性,而且我想您忘记了阅读用于使方法/属性无法重写的双下划线。
另一种声明存根方法的方法是使用abc.ABCMeta和abc.abstractmethod。
相关问题 更多 >
编程相关推荐