如何访问在Python 3.x中作为参数传递的对象的方法

时间:2019-04-20 22:57:28

标签: 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对象的Items的值,这些值是使用getter获取的。

这与我预期的一样,但是当我尝试将列表传递给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

为什么会这样?

谢谢!

2 个答案:

答案 0 :(得分:2)

您正在尝试打印对象本身而不是其值。

print(element.getAttributeA)

#Changed to 
print(element.getAttributeA())

答案 1 :(得分:1)

在classC中,您正在打印方法本身,而不是方法调用的结果,

classC.py更改为此:

class classC:
    def __init__(self):
        self

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