W jaki sposób python rozróżnia atrybut klasy, atrybut instancji i metodę, gdy nazwy są takie same?python: Co się dzieje, gdy atrybut class, atrybut instance i method mają taką samą nazwę?
class Exam(object):
test = "class var"
def __init__(self, n):
self.test = n
def test(self):
print "method : ",self.test
test_o = Exam("Fine")
print dir(test_o)
print Exam.test
print test_o.test
test_o.test()
wyjściowa:
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'test']
<unbound method load.test>
Fine
Traceback (most recent call last):
File "example.py", line 32, in <module>
test_o.test()
TypeError: 'str' object is not callable
Jak wywołać
- atrybut klasy,
Exam.test
-><unbound method load.test>
wyjście pokazuje metodę - instancji atrybut
test_o.test
->"Fine"
- metody
test_o.test()
->TypeError: 'str' object is not callable
co się stało z wywołaniem test_o.test()? – naren
@naren próbujesz wywołać członka instancji; patrz wyżej. – ecatmur