Методы использования Python от других классов

Интерфейсы и базовые классы представляют две разные формы отношений.

Наследование (базовые классы) представляет собой отношение «is-a». Например. собака или кошка - это «домашнее животное». Эта связь всегда представляет (единственную) цель класса (в сочетании с принципом «одной ответственности» »).

Интерфейсы, с другой стороны, представляют собой дополнительные функции класс. Я бы назвал это отношением «есть», например, «Foo является одноразовым», следовательно, интерфейс IDisposable в C #.

29
задан James 9 May 2010 в 09:07
поделиться

3 ответа

Есть два варианта:

  • создать экземпляр объекта в вашем классе, а затем вызвать для него нужный метод
  • использовать @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'

Или используйте наследование, если уместно:

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

class B(A):
    pass

B().a1() # => prints 'Hello from Superclass'
30
ответ дан miku 28 November 2019 в 01:22
поделиться

вы создаете класс, от которого наследуются оба класса.

Существует множественное наследование, поэтому, если у них уже есть родитель, это не проблема.

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

class first (master):
    pass


class second (master):
    pass


ichi=first()
ni=second()

ichi.stuff()
ni.stuff()
6
ответ дан o0'. 28 November 2019 в 01:22
поделиться

Существует несколько подходов:

  • Наследование
  • Делегирование
  • Сверхнизкое делегирование

В следующих примерах каждый из них используется для совместного использования функции который печатает член.

Наследование

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")

Делегирование

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()

Супер-скрытое делегирование
Это решение основано на том факте, что в функциях-членах 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

Или похожий хитрый способ достижения делегирования - использовать вызываемый объект:

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")
24
ответ дан 28 November 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: