假设我有以下python
基类:
class BaseClass(object):
def a():
"""This method uses method b(), defined in the inheriting class"""
以及继承BaseClass
的类:
{My user}只创建
if __name__ == '__main__':
# initialize the class used by the user
usedByUser = UsedByUser()
# invoke method a()
usedByUser.a()
我的问题是,以上的使用有问题吗?这是一种有效的方法吗,还是必须在BaseClass
中定义方法b()
,然后在UsedByUser
中重写它?在
使用正确。类可以定义可以重写的方法 来自子类,但这些也可以定义新方法。定义 超类中的子类所需的每个方法似乎都有点像 毫无意义。(因为
object
那么还需要 功能定义?)在一个子类通常与另一个子类具有不同的bahviour。在
类别车辆(对象): def加油(自行): # ... 在
等级飞机(车辆): def Fly(自我): # ... 在
等级车(车): def驱动(自身): # ...
编辑:我误读了代码。
如果只有您创建了它的一个子类,并确保子类具有
B()
,那么理论上是可以的,但是样式不好。提供超类所使用的属性和方法更合理、更安全。->;定义B()
我也会在
BaseClass
中定义b
方法:记住:显式比隐式好,而且鉴于方法
a
无论如何都需要方法b
,最好引发有意义的异常,而不是一般的AttributeError
。在值得指出的是,从语法的角度来看,这是绝对不需要的,但它增加了代码的清晰度,并强制子类提供了一个实现。在
听起来好像您希望
A
调用UsedByUser
的受保护成员函数,该函数不能进入抽象BaseClass
)。尝试在受保护的函数前面加下划线(尽管注意这只是Python使用的一个约定,没有严格检查,as mentioned here)。在在PEP guidelines中查找有关此约定的更多信息。在
编辑:
As GaretJax suggested,为了清晰起见,我添加了一个
BaseClass
_B
方法。小费不错!在相关问题 更多 >
编程相关推荐