Python使用其他类的方法

Jam*_*mes 29 python methods class

如果我有两个类,并且其中一个类具有我想在其他类中使用的函数,那么我使用什么以便我不必重写我的函数?

mik*_*iku 30

有两种选择:

  • 在您的类中实例化一个对象,然后在其上调用所需的方法
  • 使用@classmethod将函数转换为类方法

例:

class A(object):
    def a1(self):
        """ This is an instance method. """
        print "Hello from an instance of A"

    @classmethod
    def a2(cls):
        """ This a classmethod. """
        print "Hello from class A"

class B(object):
    def b1(self):
        print A().a1() # => prints 'Hello from an instance of A'
        print A.a2() # => 'Hello from class A'
Run Code Online (Sandbox Code Playgroud)

或者使用继承(如果适用):

class A(object):
    def a1(self):
        print "Hello from Superclass"

class B(A):
    pass

B().a1() # => prints 'Hello from Superclass'
Run Code Online (Sandbox Code Playgroud)

  • 这里没有多重继承.这是单继承,尽管您可能正在考虑分层继承. (4认同)

Mic*_*yan 24

有几种方法:

  • 遗产
  • 代表团
  • 超级偷偷摸摸的代表团

以下示例使用每个示例共享打印成员的函数.

遗产

class Common(object):
    def __init__(self,x):
        self.x = x
    def sharedMethod(self):
        print self.x

class Alpha(Common):
    def __init__(self):
        Common.__init__(self,"Alpha")

class Bravo(Common):
    def __init__(self):
        Common.__init__(self,"Bravo")
Run Code Online (Sandbox Code Playgroud)

代表团

class Common(object):
    def __init__(self,x):
        self.x = x
    def sharedMethod(self):
        print self.x

class Alpha(object):
    def __init__(self):
         self.common = Common("Alpha")
    def sharedMethod(self):
         self.common.sharedMethod()

class Bravo(object):
    def __init__(self):
         self.common = Common("Bravo")
    def sharedMethod(self):
         self.common.sharedMethod()
Run Code Online (Sandbox Code Playgroud)

超级偷偷摸摸的委托
此解决方案基于以下事实:Python成员函数没有什么特别之处; 只要将第一个参数解释为类的实例,就可以使用任何函数或可调用对象.

def commonPrint(self):
    print self.x

class Alpha(object):
    def __init__(self):
        self.x = "Alpha"
    sharedMethod = commonPrint

class Bravo(object):
    def __init__(self):
        self.x = "Bravo"
    sharedMethod = commonPrint
Run Code Online (Sandbox Code Playgroud)

或者,类似的偷偷摸摸的实现委派的方法是使用可调用对象:

class Printable(object):
   def __init__(self,x):
       self.x = x
   def __call__(self):
       print self.x

class Alpha(object):
   def __init__(self):
       self.sharedMethod = Printable("Alpha")

class Bravo(object):
   def __init__(self):
       self.sharedMethod = Printable("Bravo")
Run Code Online (Sandbox Code Playgroud)


o0'*_*0'. 6

您创建一个类,两个类都从该类继承.

有多个继承,所以如果他们已经有父,那就不是问题了.

class master ():
    def stuff (self):
        pass

class first (master):
    pass


class second (master):
    pass


ichi=first()
ni=second()

ichi.stuff()
ni.stuff()
Run Code Online (Sandbox Code Playgroud)