用Python解释继承
我正在浏览一些Python代码,发现了这个代码片段用Python解释继承,python,Python,我正在浏览一些Python代码,发现了这个代码片段 class A(object): ... def add_commands(self, cmd): self.commands.append(cmd) ... class B(A): ... def __init__(self): self.commands = [] ... 现在,由于继承,B将有权访问“add_commands”方法。令我惊讶的是,尽管类A不
class A(object):
...
def add_commands(self, cmd):
self.commands.append(cmd)
...
class B(A):
...
def __init__(self):
self.commands = []
...
现在,由于继承,B将有权访问“add_commands”方法。令我惊讶的是,尽管类A不知道列表“命令”,但这个程序编译得很好,忘记了对象B上的方法执行,结果也很好。它唯一出错的时候是当我们创建类A的对象并调用方法“add_commands”时。我知道是“自我”这个关键词拯救了我们。当编译本身失败时,在C++这样的编程语言中,情况就不会这样。
这就引出了我的问题——在Python这样的编程语言中应该如何处理继承?考虑上面的例子,在Python中设计类的正确方法是吗?Python中的继承使用与面向对象继承相同的范例。作为一种解释语言,有很多可以免除的,但这并不意味着你的类不应该像你编写java和C++那样的编译语言一样被设计。作为一种解释语言,有很多可以免除的,但这并不意味着你的类不应该像你编写java和C++那样的编译语言一样被设计。作为一种解释语言,有很多可以免除的,但这并不意味着你的类不应该像你编写java和C++那样的编译语言一样被设计。作为一种解释性语言,有很多可以免除的,但这并不意味着你的类不应该像你编写java和C++那样编写的语言一样小心。 我认为在Python中如何继承继承的问题太宽了,不能在一个帖子中回答。(我开始查看官方文件)。我想补充以下内容: 不要应用与编译语言(如C++或java)席上的完全相同的设计原则,Python的最大优点之一就是灵活性(如果使用正确,它是一个危险的但非常强大的工具)。 Python没有在您上面发布的代码中报告任何错误,因为从Python的角度来看它没有错(很明显,因为Python是解释的,而不是编译的)。Python的方法通常不是其他语言推荐的(甚至可能) 您可能会发现自己处于这样一种情况下(正如上面的评论所指出的),您希望在子对象中定义属性,以便从其父方法访问。我试图给出一个示例,希望它会有所帮助 假设有两个类代表两种不同的资源(数据库、文件等)
FirstResource
和SecondResource
。每个资源都有自己的方法,但它们都有结构上的相似性,导致某些方法具有相同的实现,这些操作处理的是一些属性resource\u attr
。resource\u attr
的初始化逻辑对于eac是不同的h资源
也许这是解决这种情况的一种实施方案:
class BaseResource(object):
def common_operation_a(self):
# Use self.resource_attr to do Operation A
def common_operation_b(self):
# Use self.resource_attr to do Operation B
class FirstResource(BaseResource):
def __init__(self):
self.resource_attr = initialize_attr_for_first_resource()
# ... FirstResource specific operations
class SecondResource(BaseResource):
def __init__(self):
self.resource_attr = initialize_attr_for_second_resource()
# ... SecondResource specific methods
然后可以按如下方式使用此实现:
# Create resources objects
first_resource_instance = FirstResource()
second_resource_instance = SecondResource()
# The resources share the implementation of Operation A
first_resource_instance.common_operation_a()
second_resource_instance.common_operation_a()
# The following implementations are resource-specific
first_resource_instance.some_operation_c()
second_resource_instance.some_operation_d()
我认为如何在Python中实现继承的问题太广泛,无法在一篇文章中回答(我将开始查看官方文档) 不要应用与编译语言(如C++或java)席上的完全相同的设计原则,Python的最大优点之一就是灵活性(如果使用正确,它是一个危险的但非常强大的工具)。 Python没有在您上面发布的代码中报告任何错误,因为从Python的角度来看它没有错(很明显,因为Python是解释的,而不是编译的)。Python的方法通常不是其他语言推荐的(甚至可能) 您可能会发现自己处于这样一种情况下(正如上面的评论所指出的),您希望在子对象中定义属性,以便从其父方法访问。我试图给出一个示例,希望它会有所帮助 假设有两个类代表两种不同的资源(数据库、文件等)
FirstResource
和SecondResource
。每个资源都有自己的方法,但它们都有结构上的相似性,导致某些方法具有相同的实现,这些操作处理的是一些属性resource\u attr
。resource\u attr
的初始化逻辑对于eac是不同的h资源
也许这是解决这种情况的一种实施方案:
class BaseResource(object):
def common_operation_a(self):
# Use self.resource_attr to do Operation A
def common_operation_b(self):
# Use self.resource_attr to do Operation B
class FirstResource(BaseResource):
def __init__(self):
self.resource_attr = initialize_attr_for_first_resource()
# ... FirstResource specific operations
class SecondResource(BaseResource):
def __init__(self):
self.resource_attr = initialize_attr_for_second_resource()
# ... SecondResource specific methods
然后可以按如下方式使用此实现:
# Create resources objects
first_resource_instance = FirstResource()
second_resource_instance = SecondResource()
# The resources share the implementation of Operation A
first_resource_instance.common_operation_a()
second_resource_instance.common_operation_a()
# The following implementations are resource-specific
first_resource_instance.some_operation_c()
second_resource_instance.some_operation_d()
我认为如何在Python中实现继承的问题太广泛,无法在一篇文章中回答(我将开始查看官方文档) 不要应用与编译语言(如C++或java)席上的完全相同的设计原则,Python的最大优点之一就是灵活性(如果使用正确,它是一个危险的但非常强大的工具)。 Python没有在您上面发布的代码中报告任何错误,因为从Python的角度来看它没有错(很明显,因为Python是解释的,而不是编译的)。Python的方法通常不是其他语言推荐的(甚至可能) 你可能会发现自己陷入了困境