Как получить доступ к методу объекта, переданного в качестве аргумента в Python 3.x

#python-3.x

#python-3.x

Вопрос:

допустим, у меня есть два таких пакета:

 ├── packages
│   ├── __init__.py
│   ├── packageA
│   │   ├── classA.py
│   │   ├── classB.py
│   │   └── __init__.py
│   ├── packageB
│   │   ├── classC.py
│   │   └── __init__.py       
└── test
   ├── __init__.py
   └── test.py
  

это содержимое файлов py:

  • classA.py :
 class classA:
    def __init__(self, a ,b):
        self.__attributeA = a
        self.__attributeB = b

    def getAttributeA(self):
        return self.__attributeA

    def getAttributeB(self):
        return self.__attributeB

  
  • classB.py :
 from packages.packageA import classA

class classB:
    def __init__(self):
        self

    def getList(self):
        list = [classA.classA(10, 11), classA.classA(20, 21)]
        return list
  
  • classC.py :
 class classC:
    def __init__(self):
        self

    def method(self,object):
        for element in object:
            print(element.getAttributeA)
  
  • test.py :
 from packages.packageA import classB
from packages.packageB import classC

testClassB = classB.classB().getList()
for element in testClassB:
    print(element.getAttributeA())

testClassC = classC.classC()
testClassC.method(testClassB)
  
  • В test.py , создавая два экземпляра, один из classB и один из classC .
  • Я пытаюсь напечатать значения элементов в списке, которые являются classA объектами, эти значения получаются с помощью геттеров.

Это работает так, как я ожидал, но когда я пытаюсь передать список classC и пытаюсь сделать то же самое, я получаю этот вывод:

     <bound method classA.getAttribteA of <packages.packageA.classA.classA object at 0x7fd038244a20>>
    <bound method classA.getAttribteA of <packages.packageA.classA.classA object at 0x7fd0382448d0>>
  

когда я должен был получить это :

 10
20
  

почему это происходит?

Спасибо!

Ответ №1:

Вы пытаетесь напечатать сам объект, а не его значение.

 print(element.getAttributeA)

#Changed to 
print(element.getAttributeA())
  

Ответ №2:

в ClassC вы печатаете сам метод, а не результат вызова метода,

измените classC.py на это :

 class classC:
    def __init__(self):
        self

    def method(self,object):
        for element in object:
            print(element.getAttributeA()) ## added ()