@FunnyJingl

Как передать атрибуты экземпляров класса в определение функции?

Здравствуйте, такой вопрос от начинающего.
Пусть есть два класса и их экземпляры.
class C1: 
    def __init__(self, value1):
        self.attr1 = value1
class C2:
    def __init__(self, value2):
        self.attr2 = value2
inst1 = C1(val)
inst2 = C2(val)

Как создать функцию, которая бы на вход принимала экземпляры, из которых она бы вытаскивала аттрибуты, примерно так:
def foo(ekz1, ekz2)
    return ekz1.attr1 * ekz.attr2

Принципиально важно объявить функцию, у которой на входе будут именно экземпляры класса.
  • Вопрос задан
  • 224 просмотра
Решения вопроса 2
Avernial
@Avernial
Разрабатываю научное ПО на языке Python.
ekz1.attr1 и getattr(ekz1, "attr1") равнозначны. Соответственно в функции у вас может написано быть как угодно:

И так:

def foo(ekz1, ekz2):
    print(ekz1.attr1, ekz2.attr2)


И так:

def foo(ekz1, ekz2):
    print(getattr(ekz1, "attr1"), getattr(ekz2, "attr2"))


Однако, если хотите отследить, что передаются верные объекты в функцию для этого лучше воспользоваться методом hasattr:

class C1:
    def __init__(self, value1):
        self.attr1 = value1


class C2:
    def __init__(self, value2):
        self.attr2 = value2


def func(ekz1, ekz2):
    if not hasattr(ekz1, "attr1"):
        print("{0} has no attr1".format(type(ekz1)))
        return
    if not hasattr(ekz2, "attr2"):
        print("{0} has no attr2".format(type(ekz2)))
        return
    print(ekz1.attr1, ekz2.attr2)

inst1 = C1(10)
inst2 = C2(11)


func(inst1, inst2)

func(inst1, [1, 2, 3])
Ответ написан
@FunnyJingl Автор вопроса
Спасибо за помощь, ответ нашел, необходимо в функции просто прописать функцию getattr - например getattr(ekz1, 'attr1).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xozzslip
@xozzslip
Чекни мой канал о кодинге https://bit.ly/2LNBAL8
Питон — язык динамически типизированный (статья на вики о динамической типизации). Поэтому нельзя объявить функцию, вход которой должен быть экземпляром класса, придется просто проверить аргумент на тип внутри функции (вопрос на stackoverflow о том, как это сделать).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
OnederX Москва
от 100 000 до 120 000 ₽
NatsON Москва
от 220 000 до 350 000 ₽
SwapZilla.co Москва
от 200 000 ₽
15 авг. 2020, в 05:42
50000 руб./за проект
15 авг. 2020, в 05:23
5000 руб./за проект
15 авг. 2020, в 04:49
5000 руб./за проект