在不同类中的两个函数之间的链接

时间:2015-02-17 15:01:56

标签: python function class oop

我是Python新手并尝试创建基于文本的冒险游戏并遇到一些问题。下面的代码是我目前所困的代表。

class A(object):
   def funct1(self):
      pass
   def funct2(self):
      pass

class B(object):
   def funct1(self):
      pass

我试图从B类funct1链接到A类funct2,这是不成功的。虽然我理解一个类的每个函数中的函数之间的链接(例如self.funct2()),但是对于我来说,不同类中的函数之间的链接仍然不清楚。

我尝试使用def __init__,但我不确定它在这种情况下是如何适用的。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

如果您想使用B类A中的方法,则需要使用inheritance

class A(object):
   def funct1(self):
      print("Hello from func1")

   def funct2(self):
      print("Hello from  func2")

class B(A):
    pass

b = B()
b.funct2()
b.funct1()
Hello from  func2
Hello from  func1

现在要调用类B中的继承方法,只需使用self.func1(), self.func2()..

即可

如果您希望func1在类B中的行为方式不同,则可以覆盖该方法:

class A(object):
   def funct1(self):
      print("Hello from A class func1")

   def funct2(self):
      print("Hello from A class func2")

class B(A):
    def funct1(self):
        print("overridden method")


b = B()
b.funct2()
b.funct1()

Hello from A class func2
overridden method

如果您希望实例具有name属性,请在__init__方法中创建属性:

class A(object):
    def __init__(self, name):
        self.name = name

    def funct1(self):
      print("Hello from A class func1")

    def funct2(self):
      print("Hello from A class func2")

class B(A):
    def funct1(self):
        print("overridden method")


b = B("bar")  
print(b.name)
bar

我提供的python-practice-book链接中有一个很好的教程,我建议你看一下。

答案 1 :(得分:0)

访问其他类中的函数在python中非常简单,只需要声明ClassName即可。 functionName() 这是一个例子:

class A(object):
   def funct1(self):
      pass
   def funct2(self):
      pass

class B(object):
   def funct1(self):
      pass
B.funct1()

Classname.functionName(对象)

答案 2 :(得分:-1)

我希望我能理解你的问题。听起来您正试图从A.func1()致电B.func1()。此问题的问题是,除非您使用继承,否则类A没有关于B的信息。

您可以利用继承,但另一个解决方案是让B.func1()接受A的实例作为参数。

有关此类互动的示例,请考虑会计师如何与发票进行互动。发票不会从会计中继承任何内容,反过来也是如此。会计师需要做的就是取得发票并激活Pay方法。

class Invoice():
    amount_due = 100

    def pay(self, payment_method):
        pass

class Accountant():
    def pay_invoice(self, invoice, payment_method):
        if invoice.amount_due > 0:
                invoice.pay(payment_method)

Accountant课程不需要了解Invoice课程,除了Pay方法需要payment_method。只要有人这样做,Invoice课程并不关心谁付钱。