【问题标题】:creating a method in object oriented programming with python使用python在面向对象编程中创建方法
【发布时间】:2013-12-07 22:57:13
【问题描述】:

我正在学习 Python 中的面向对象编程,但我不太清楚如何为类编写方法

  1. 我的第一个问题是,你可以同时继承两个类吗? 示例:

    class A:
        def __init__ eg. storing list of strings 
    
    class B:
        def __ init__ eg. storing list of strings
    
    # I want to inherit both class A and B into class C
    class C (A,B): 
    

    这可能吗?许多示例只显示了从一个类继承。

  2. 假设我可以从class Aclass B 导入方法,我需要合并class A 中的实例和class B 中的实例。例如,class A 存储名称列表,class B 存储头发颜色列表。在class C 我想把名字和头发颜色加在一起,这样我就可以知道谁的头发颜色是什么。我不太确定如何将这两个对象添加在一起,但这是我的尝试。你能帮我提供如何解决这个问题的建议吗?

    class A: 
        def __init__(self,name):
            self.name= name
        def getName(self):
            return self.name # this is so that i whenever i call the object in my class C, it will return the name
    
    class B:
        def __init__(self,hair):
            self.hair = hair
        def getHair (self):
            return self.hair
    
    class C(A,B):
        def __init__(self):
            A.__init__(self,name)
            B.__init__(self,hair)
    
            self.add= [self,A,B]
            def add(self,name,hair): # my method to combine instances in class A and B
                self.add.append[name,hair] 
    

解决此添加问题后,即存储谁拥有哪种头发颜色的信息,我的目标是在class C 中创建另一个方法,当我提供头发颜色参数时,它将列出所有具有相同头发颜色的名称.如果不先添加两个实例,我就无法做到这一点。

我试图通过给每个类几个对象来运行它。 class Aclass B 没问题,我可以让程序返回我的名字和头发颜色。但问题是在我尝试执行 .add 部分之后出现的。它给了我一条消息错误,上面写着

TypeError: 'list' object is not callable

请告诉我整个事情是否有问题,我应该开始使用不同的方法编写,否则我的程序仍然可以获救。

【问题讨论】:

  • 关于您的第一个问题:是的,您可以这样做。它被称为multiple inheritance
  • 请注意,使用您定义函数add 的方式,它在类外是不可见的。您需要减少函数的缩进才能使其可见
  • 在这种情况下,我建议您优先考虑组合而不是继承。

标签: python class inheritance


【解决方案1】:

第一个问题。答案是肯定的。

在类定义之后你需要一些东西。有时所有的行为都是由 A 和 B 定义的,所以你只需要把pass 放在那里(或一个文档字符串)

class C(A, B):
    pass

第二个问题:append是一个函数,需要用括号调用

self.add.append((name, hair))

您不能拥有属性add 和方法add,因为它们共享相同的命名空间。您最后定义的任何一个都将替换另一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2015-04-28
    相关资源
    最近更新 更多