Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.085 X-Spam-Evidence: '*H*': 0.83; '*S*': 0.00; 'else:': 0.03; 'sys': 0.07; 'string': 0.09; '[1,': 0.09; 'namespace': 0.09; 'obj': 0.09; 'cc:addr:python-list': 0.11; 'python': 0.11; 'def': 0.12; '@property': 0.16; 'module': 0.19; 'first.': 0.19; 'import': 0.22; 'cc:addr:python.org': 0.22; 'cc:2**0': 0.24; 'appreciated': 0.26; 'class.': 0.26; 'player': 0.26; 'this:': 0.26; 'header:In-Reply- To:1': 0.27; 'function': 0.29; 'message-id:@mail.gmail.com': 0.30; 'included': 0.31; 'end,': 0.31; 'indentation': 0.31; 'mod': 0.31; 'prints': 0.31; 'anyone': 0.31; 'class': 0.32; 'this.': 0.32; 'received:209.85.212': 0.32; 'level.': 0.33; 'skip:# 10': 0.33; 'skip:_ 10': 0.34; 'could': 0.34; 'received:209.85': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'there': 0.35; 'in.': 0.36; 'level': 0.37; 'received:209': 0.37; 'little': 0.38; 'does': 0.39; 'bad': 0.39; 'subject:Can': 0.60; 'break': 0.61; 'john': 0.61; 'name': 0.63; 'field': 0.63; 'skip:n 10': 0.64; 'charset:iso-2022-jp': 0.65; 'reads': 0.68; 'lives': 0.74; 'inform': 0.78; 'hand': 0.80; 'dealer': 0.84; 'dealer,': 0.84; 'hand.': 0.84; 'player.': 0.84; 'resides': 0.84; 'skip:\x1b 30': 0.84; 'subject:self': 0.84; 'subject:you': 0.87 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=20KsaeIzK+vDO7b6iMz0SVldwkFd8rYKQO6T5wLookE=; b=V79A4bfAYMHKDBu7wzvOQxLvHl/WXZFu6oxDQ+DA9T1Y/1AxBvnYOkKme8c6flDe4+ r23/NDXjG+AW/HugLqElJpBn5h2hono109MMo+McfxYUcumHCWZ/2ufx2bDYSYwtzzIC hQ10wbI8q2RHvN2BE58HeqRb5mhzGFctAF9WHWFTwaxwdLnMGBV+lOAn9/7nJ34bqZCc E1xagYTzl067AsXEtrBHc7NnOAwlzjUJUsrm1uUMk8qXGZQBWhJmGrYNtLwkPHST+qfg CouECQwkKqk9MWqvIk5ey43GMfTotvd+JhFi8aHL7cdTV7PNYovGkv/acmD826NzOjfb AbyA== X-Gm-Message-State: ALoCoQk03NbHZocIDr4hc08qsa9EP8CLIoVotz9LKpF7FD/o/9ctN/rThn/20o7xl59CzveDU+Nq MIME-Version: 1.0 X-Received: by 10.180.198.211 with SMTP id je19mr3986535wic.27.1417143866762; Thu, 27 Nov 2014 19:04:26 -0800 (PST) X-Originating-IP: [143.89.99.158] In-Reply-To: <9oif7apuou9fbaqjk0i3l2pq1theuso4un@4ax.com> References: <9oif7apuou9fbaqjk0i3l2pq1theuso4un@4ax.com> Date: Fri, 28 Nov 2014 11:04:26 +0800 Subject: Re: Can you use self in __str__ From: Shiyao Ma To: Seymore4Head Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Cc: Python X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 82 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1417143874 news.xs4all.nl 2913 [2001:888:2000:d::a6]:60698 X-Complaints-To: abuse@xs4all.nl Path: csiph.com!usenet.pasdenom.info!bete-des-vosges.org!feed.ac-versailles.fr!nerim.net!novso.com!newsfeed.xs4all.nl!newsfeed1a.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Xref: csiph.com comp.lang.python:81659 2014-11-28 9:26 GMT+08:00 Seymore4Head : > def __str__(self): > s = "Hand contains " > for x in self.hand: > s = s + str(x) + " " > return s > > This is part of a Hand class. I need a hand for the dealer and a hand > for the player. > dealer=Hand() > player=Hand() > This prints out 'Hand contains " foo bar > for both the dealer's hand and the player's hand. > > Is there a way to include "self" in the __string__ so it reads > Dealer hand contains foo bar > Player hand contains foo bar I bet you want the object name (aka, dealer, player) be included in the string 's'. To that end, you need to access the namespace where 'self' is in. But I dunno where the namespace 'self' resides in. Does PyObject has a field to store the namespace of an object? Appreciated if anyone could inform me on this. Now, make a little assumption that the instance lives in the module level. Then we can do this: #!/usr/bin/env python class Hand(object): def __init__(self): self.hand = [1, 2, 3, 4] def __str__(self): s = self._myname + " hand contains " for x in self.hand: s = s + str(x) + " " return s @property def _myname(self): # get the module mod = self.__module__ import sys ns = vars(sys.modules[mod]) # NB only works the instance is at the module level for name, obj in ns.iteritems(): if id(obj) == id(self): break else: #nothing found return "" return name John = Hand() print(John) # this prints # John hand contains 1 2 3 4 bad indentation with my wasavi plugin, see paste: https://bpaste.net/show/f5b86957295f What if it's in the local namespace of a function or method? IDK, try to get that thing first. Regards -- 吾輩は猫である。ホームーページはhttp://introo.me。