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

  • Home
  • SEARCH
  • 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 889511
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 15, 20262026-05-15T13:34:47+00:00 2026-05-15T13:34:47+00:00

class Parent(): def __init__(self): self.child = Child() class Child(): def __init__(self): # get Parent

  • 0
class Parent():
  def __init__(self):
    self.child = Child()

class Child():
  def __init__(self):
    # get Parent instance
    self.parent = self.Instantiator()

I know this isn’t proper encapsulation but for interest’s sake…

Given a “Parent” class that instantiates a “Child” object, is it possible from within Child to return the Parent object that instantiated it? And if no, I’m curious, do any languages support this?

  • 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-15T13:34:47+00:00Added an answer on May 15, 2026 at 1:34 pm

    Here’s a reasonably-simple metaclass solution to the problem:

    import functools
    
    class MetaTrackinits(type):
    
      being_inited = []
    
      def __new__(cls, n, b, d):
        clob = type.__new__(cls, n, b, d)
    
        theinit = getattr(clob, '__init__')
        @functools.wraps(theinit)
        def __init__(self, *a, **k):
          MetaTrackinits.being_inited.append(self)
          try: theinit(self, *a, **k)
          finally: MetaTrackinits.being_inited.pop()
        setattr(clob, '__init__', __init__)
    
        def Instantiator(self, where=-2):
          return MetaTrackinits.being_inited[where]
        setattr(clob, 'Instantiator', Instantiator)
    
        return clob
    
    __metaclass__ = MetaTrackinits
    
    
    class Parent():
      def __init__(self):
        self.child = Child()
    
    class Child():
      def __init__(self):
        self.parent = self.Instantiator()
    
    
    p = Parent()
    print p
    print p.child.parent
    

    a typical output, depending on the platform, will be something like

    <__main__.Parent object at 0xd0750>
    <__main__.Parent object at 0xd0750>
    

    You could obtain a similar effect (in 2.6 and later) with a class decorator, but then all classes needing the functionality (both parent and children ones) would have to be explicitly decorated — here, they just need to have the same metaclass, which may be less intrusive thanks to the “module-global __metaclass__ setting” idiom (and the fact that metaclasses, differently from class-decorations, also get inherited).

    In fact, this is simple enough that I would consider allowing it in production code, if the need for that magical “instantiator” method had a proven business basis (I would never allow, in production code, a hack based on walking the stack frames!-). (BTW, the “allowing” part comes from the best-practice of mandatory code reviews: code changes don’t get into the trunk of the codebase without consensus from reviewers — this how typical open source projects work, and also how we always operate at my employer).

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

Sidebar

Ask A Question

Stats

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

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

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

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

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Maybe this small tidbit might help you out: you need… May 15, 2026 at 4:04 pm
  • Editorial Team
    Editorial Team added an answer From drupal cron manual page: Running cron as an authenticated… May 15, 2026 at 4:04 pm
  • Editorial Team
    Editorial Team added an answer TextBox is single line editor and TextArea is multi line… May 15, 2026 at 4:04 pm

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.