Как включить атрибуты функции внутри класса?

class c():

    def foo(self):
        self.foo.loss1 = 20
        return(50)

prob = c()
l1 = prob.foo.loss1

print(l1)

l1 = prob.foo.loss1

AttributeError: у объекта 'function' нет атрибута 'loss1'

Всего 3 ответа


Ваш класс строительства не прямо здесь. Итак, вы пытаетесь взять два входных числа и вернуть их суммирование методом foo . Давайте сделаем Klass который насытит ваше намерение здесь.

class Klass:
    def __init__(self, loss1, loss2):
       """Take input and initialize your class."""

        self.loss1 = loss1
        self.loss2 = loss2

    def foo(self):
        """Method that returns summation of the inputs."""

        return self.loss1 + self.loss2

Теперь используйте класс следующим образом:

# making an instance of your class
l1 = Klass(loss1=20, loss2=30)

# calling the foo method and printing the result
print(l1.foo())

Это показывает:

>> 50

Вы делаете несколько вещей неправильно. Атрибуты будут добавлены только при вызове метода класса, и это невозможно сделать, пока вы не создадите его экземпляр. Вы также не добавляете атрибут правильно.

Вот версия, которая работает:

class c:
    def foo(self):
        c.foo.loss1 = 20
        c.foo.loss2 = 30
        return(50)

inst = c()
inst.foo()

l1 = c.foo.loss1
l2 = inst.foo.loss1

print(l1)  # -> 20
print(l2)  # -> 20

Похоже, что намерения ОП отличались от вопроса, но ниже следует ответить на первоначальный вопрос.


Уберите их из метода - вы никогда не вызывали его, поэтому у атрибута не было времени для определения:

>>> class c():
...     def foo(self): print(1)
...     foo.x = 3
...
>>> print(c.foo.x)
3

Здесь не нужно никаких экземпляров, просто определение класса.


Есть идеи?

10000