Python, как выполнить метод объекта, который вызывает функцию, которая вызывает другой метод из того же объекта - PullRequest
0 голосов
/ 05 июня 2018

Эта функция называется start_party , которая не принадлежит ни одному классу, независимая функция, которая печатает музыку, говорит участнику вечеринки сделать что-то интересное, например, танцевать или петь.

A человек может подходить как участник вечеринки, у него чувство с двумя состояниями: в соединение и вне соединения.Человеку может быть приказано выполнить действие (метод) в соответствии с внешней функцией;поэтому, когда человек выполняет действие, он начинает с ощущения связи, участвует во внешней функции, какой бы метод ни попросили достичь.Внешняя функция останавливается (начало вечеринки заканчивается ...), и поэтому Человек чувствует себя оторванным от этого невероятного момента, который дает нам знать, печатая его.

Весь этот опыт был реализован следующим образом:

class Feeling():
    def __init__(self):
        self.data_in = 'into connection'
        self.data_out = 'out of connection'


class Person():
    def __init__(self):
        self.feeling = Feeling()

    def execute(self, outer_function, inner_function):
        print(self.feeling.data_in)
        outer_function(self, inner_function)
        print(self.feeling.data_out)

    def dance(self):
        print(' └[∵┌]└[ ∵ ]┘[┐∵]┘ ')

    def sing(self):
        print('( ◜◒◝ )')


def start_party(party_participant, inner_function):
    print('♬♩♪♩')
    party_participant.inner_function()
    print('♬♩♪♩')


liz = Person()
liz.execute(start_party, dance)

Моя лучшая попытка и не компилируется, она дает мне:

NameError: имя 'dance' не определено

Но все же главная проблема заключается вне компиляция, это дизайн.(Хотя мне нужно исправить и компиляцию.)

Желаемый результат должен быть:

into connection
♬♩♪♩
└[∵┌]└[ ∵ ]┘[┐∵]┘
♬♩♪♩
out of connection

1 Ответ

0 голосов
/ 05 июня 2018

Используйте getattr(), чтобы получить метод класса для выполнения, например:

Код:

def start_party(party_participant, inner_function):
    print('♬♩♪♩')
    getattr(party_participant, inner_function)()
    print('♬♩♪♩')

Код теста:

class Feeling():
    def __init__(self):
        self.data_in = 'into connection'
        self.data_out = 'out of connection'


class Person():
    def __init__(self):
        self.feeling = Feeling()

    def execute(self, outer_function, inner_function):
        print(self.feeling.data_in)
        outer_function(self, inner_function)
        print(self.feeling.data_out)

    def dance(self):
        print(' └[∵┌]└[ ∵ ]┘[┐∵]┘ ')

    def sing(self):
        print('( ◜◒◝ )')


def start_party(party_participant, inner_function):
    print('♬♩♪♩')
    getattr(party_participant, inner_function)()
    print('♬♩♪♩')


liz = Person()
liz.execute(start_party, 'dance')

Результаты:

into connection
♬♩♪♩
 └[∵┌]└[ ∵ ]┘[┐∵]┘ 
♬♩♪♩
out of connection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...