Вернуть несколько значений из класса в Python? - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть небольшой тестовый код, чтобы увидеть, как работают классы.

class Person:
    def __init__(self):
      self.name = ("Mike")

    def myfunc(self):
      print("Hello my name is " + self.name)

p1 = Person()
hello = p1.myfunc()
hello

Я хочу, чтобы self.name возвращалось из класса, чтобы я мог использовать его вне класса. Это возможно? Я хочу, чтобы значение возвращалось без строки 'hello my name is', поэтому при печати возвращаемого значения выводится «Mike», а не «Hello, меня зовут Mike». Пока это только одно значение, поскольку это тестовый код. Если здесь все работает отлично, я добавлю его в свой реальный код, чтобы убедиться, что он работает.

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

(1) Возвращать значения из функции в классе в обычном режиме с использованием возвращаемой переменной.

(2) Затем вывести его вне класса: variable = (myClass (). Variable), а затем вывести переменную.

(3) Если вы не хотите распечатывать его, просто используйте переменную как обычно.

Вы успешно смогли получить значения из класса и использовать его во всей программе без необходимости использования ключевого слова global!

РЕДАКТИРОВАТЬ, похоже, вам даже не нужно возвращать значения: (myClass (). Variable) получит значение прямо из класса, даже не возвращая значения, что поддерживается этим кодом:

class Person:
    def __init__(self):
        self.name1 = ("Mike")
        self.name2 = ("John")
        self.name3 = ("Jane")
        self.name4 = ("Doe")

name1, name2, name3, name4 = (Person().name1), (Person().name2), (Person().name3), (Person().name4)
print (name1, name2, name3, name4)
0 голосов
/ 04 ноября 2018

В python нет способа ограничить или предоставить доступ к атрибуту. По умолчанию вы можете получить доступ к атрибуту вне объекта, в отличие от Java, где вы можете получить доступ только к атрибутам, которые подписаны как общедоступные. Таким образом, вы можете напрямую получить атрибут name в вашем экземпляре, написав person1.name, где person1 - это класс класса Person, однако это плохая практика в объектно-ориентированном программировании ( OOP ).

Альтернативный способ - создать две функции: установщик и получатель, которые устанавливают и возвращают соответственно значение заинтересованного атрибута. В вашем случае это будет:

def setName(self,name):
    self.name = name

def getName(self):
    return self.name

Таким образом, вы соблюдаете некоторые принципы инкапсуляции данных ООП, и когда вам нужно увидеть, как имя просто вызывает метод в экземпляре person1.getName().

Примечание:

Одним из преимуществ этого подхода является то, что теперь вы можете проверить, какое значение может принимать ваш экземпляр. Для класса Person и примера установка числа не имеет смысла, поэтому проверка, является ли аргумент name действительно строкой, перед обновлением будет хорошей.

Подробнее о личных атрибутах в python и здесь . Для получения и установки смотрите эту ссылку , где вы также можете узнать о Свойствах концепции.

0 голосов
/ 04 ноября 2018

Попробуйте использовать p1.pname И p1.myfunc() не даст вывод, так что нет смысла хранить его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...