Задать вопрос
@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

Принципиально важно объявить функцию, у которой на входе будут именно экземпляры класса.
  • Вопрос задан
  • 715 просмотров
Подписаться 2 Оценить 5 комментариев
Решения вопроса 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).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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