Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

I've been reading the article on the data model of Python on its Reference website, and have been confused about this part:

When the attribute is a user-defined method object, a new method object is only created if the class from which it is being retrieved is the same as, or a derived class of, the class stored in the original method object; otherwise, the original method object is used as it is.

Essentially, I cannot really conjure up two scenarios where in one the method object is is the same as the original method object, and in the other a new method object is created. Here's the closest I can come:

class TestClass:
    def TestFunc():
        pass

class TestClass2:
    x_attr = TestClass().TestFunc
    y_attr = TestClass.TestFunc
    def __init__(self):
        print "x's class is " + repr(TestClass2.x_attr.__class__)
        print "y's class is " + repr(TestClass2.y_attr.__class__)

if __name__ == '__main__':
    tc = TestClass()
    tc2 = TestClass2()

    print "tc.TestFunc: ".ljust(20) + str(id(tc.TestFunc))              # retrieved from TestClass
    print "TestClass.TestFunc: ".ljust(20) + str(id(TestClass.TestFunc))# retrieved from TestClass
    print "tc2.x_attr: ".ljust(20) + str(id(tc2.x_attr))                # retrieved from TestClass2
    print "tc2.y_attr: ".ljust(20) + str(id(tc2.y_attr))                # retrieved from TestClass2

However, the output of the different test cases is not as I would expect by reading the passage from the Reference:

x's class is <type 'instancemethod'>
y's class is <type 'instancemethod'>
tc.TestFunc:        140591510137584
TestClass.TestFunc: 140591510137584
tc2.x_attr:         140591509970288
tc2.y_attr:         140591510137424

Specifically, I was expecting TestClass.TestFunc and tc2.y_attr (i.e. TestClass2.y_attr) to be the same based on what is cited from the Reference.

Furthermore, I was expecting to see the same outcome for the <tc.TestFunc, TestClass.TestFunc> comparison pair and the <tc2.x_attr, tc2.y_attr> comparison pair (i.e. each pair the same or neither the same).

Could you please clarify why this is and what exactly the Reference is trying to say?

Thank you!

P.S. Using Python 2.7.6 on Ubuntu 14.04.

share|improve this question

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.