Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python解释继承_Python - Fatal编程技术网

用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不

我正在浏览一些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不知道列表“命令”,但这个程序编译得很好,忘记了对象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的方法通常不是其他语言推荐的(甚至可能)

你可能会发现自己陷入了困境