使用python在面向对象编程中创建方法

时间:2013-12-07 22:57:14

标签: python class inheritance

我在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] 
    
  3. 解决了这个添加问题,即存储谁拥有什么头发颜色的信息后,我的目标是在class C中创建另一种方法,当我提供头发时,它会列出所有具有相同头发颜色的名称颜色参数。如果不首先添加两个实例,我就无法做到这一点。

    我试图通过为每个类提供几个对象来运行它。 class Aclass B没关系,我可以让程序返回名称和头发颜色。但问题发生在我试图执行.add部分之后。它给我一个消息错误,上面写着

    TypeError: 'list' object is not callable
    

    请告诉我整件事是否错误,我应该开始用不同的方法写作,否则我的程序仍然可以获救。

1 个答案:

答案 0 :(得分:1)

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

在类定义之后,你需要某些东西。有时,所有行为都由A和B定义,因此您只需将pass放在那里(或文档字符串)

class C(A, B):
    pass

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

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

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