Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 970995
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T02:53:31+00:00 2026-05-16T02:53:31+00:00

I have something like that in my python code class A: __mess = Yeap!

  • 0

I have something like that in my python code

class A:
  __mess = "Yeap!"
  def doSome(self):
    self.FN()
  def FN(self):
    pass

def myFN(self):
  print self.__mess

b = A()
b.FN = myFN
b.doSome()

But this doesn’t work. Where am I wrong?

python 2.6.5

upd: I want to redefine method (FN) only for one exemplar (b).

upd2:

import new
class A:
  __mess = "Yeap!"
  def doSome(self):
    self.FN()
  def FN(self):
    pass

def myFN(self):
  print self.__mess

b = A()
b.FN = new.instancemethod(myFN, b, A)
b.doSome()

Doesn’t work too.

Traceback (most recent call last):
File “”, line 1, in
File “”, line 4, in doSome
File “”, line 2, in myFN
AttributeError: A instance has no
attribute ‘__mess’

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T02:53:31+00:00Added an answer on May 16, 2026 at 2:53 am

    myLoopFN is a function, not an instance method. Do

    import new
    b.loopFN = new.instancemethod( myLoopFN, b, A )
    

    The problem is that Python treats instance methods very slightly differently to regular functions: they get the instance upon which they are run as the default first argument. If you define a method inside a class definition it automagically becomes an instance method, so that when you instantiate the class it gets passed the instance. However, when you define myLoopFN you do it outside the class definition, so that it is an ordinary function instead of an instance method. You fix this by explicitly declaring it as an instance method.

    …

    BUT

    This is icky because it’s not something you should do; changing instance methods at runtime will lead to problems. You’ll never be sure whether your A is an original A or a modified one, and you won’t be able to debug it because you can’t tell whether you’ve changed loopFN or not. This will give you the kind of bugs that Nyarlathotep himself would be proud of.

    The right way to do this is to subclass A and override the method, so that you can distinguish between the different classes.

    class myA( A ):
        def loopFN(self):
            #put modified function here
    

    This way, you can instantiate the modified class and be certain of its methods.

    Edit

    You are using a double-underscore variable name, __mess. You (almost certainly) don’t want to do this. For some reason known only to our Benevolent Dictator for Life and a select few others, Python automatically mangles these __ names to _<class-name>__, to serve as a sort-of faux private variable. This is horrible, and besides there’s no reason to call it __mess instead of (the much nicer) mess.

    If you absolutely must call it __mess, you can refer to it as follows:

    def myFN(self):
        print( self._A__mess )
    

    (mutatis mutandis when you change the name of A). This is nasty and unPythonic.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 478k
  • Answers 478k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Well, I'm at a loss to say why the AppSettings… May 16, 2026 at 5:29 am
  • Editorial Team
    Editorial Team added an answer The tool you want is git filter-branch. Its usage is… May 16, 2026 at 5:29 am
  • Editorial Team
    Editorial Team added an answer Use either array_slice(): foreach (array_slice($posts, 0, 5) as $post) ....… May 16, 2026 at 5:29 am

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.