Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

"No matter where you go, there you are..." -- Buckaroo Banzai


devel / comp.lang.python / Re: Dealing with non-callable classmethod objects

SubjectAuthor
o Re: Dealing with non-callable classmethod objectsWeatherby,Gerard

1
Re: Dealing with non-callable classmethod objects

<mailman.951.1668279916.20444.python-list@python.org>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=20326&group=comp.lang.python#20326

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: gweathe...@uchc.edu (Weatherby,Gerard)
Newsgroups: comp.lang.python
Subject: Re: Dealing with non-callable classmethod objects
Date: Sat, 12 Nov 2022 18:44:32 +0000
Lines: 111
Message-ID: <mailman.951.1668279916.20444.python-list@python.org>
References: <b4954329-dded-fded-2dbb-035357ac55c1@gmail.com>
<Y27RHc8oJsin8pge@cskk.homeip.net>
<b79fac3a-da32-d4fc-a4da-051e14694d87@gmail.com>
<SA1PR14MB5855109709408A32B86878F9B9039@SA1PR14MB5855.namprd14.prod.outlook.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
X-Trace: news.uni-berlin.de 80Vm0CeP+flCkBSxe74bnwsBJPMjl2+xnqw651W2pwIQ==
Return-Path: <prvs=0315b25f7b=gweatherby@uchc.edu>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
reason="2048-bit key; unprotected key"
header.d=uchc.edu header.i=@uchc.edu header.b=DN5f71bY;
dkim-adsp=pass; dkim-atps=neutral
X-Spam-Status: OK 0.006
X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'skip:@ 10': 0.03; 'this:':
0.03; 'def': 0.04; '2022': 0.05; 'class,': 0.05; 'suggestion':
0.07; 'else:': 0.09; 'obviously': 0.09; 'output:': 0.09;
'received:namprd14.prod.outlook.com': 0.09; 'sig': 0.09; 'skip:`
20': 0.09; '&gt;': 0.14; 'import': 0.15; 'url:mailman': 0.15;
'***': 0.16; '-&gt;': 0.16; '@classmethod': 0.16; 'assert': 0.16;
'cameron': 0.16; 'inspect': 0.16; 'lambda': 0.16; 'simpson': 0.16;
'static': 0.16; 'treats': 0.16; 'url:urldefense': 0.16; 'url:v3':
0.16; 'wrote:': 0.16; 'probably': 0.17; 'to:addr:python-list':
0.20; "i've": 0.22; 'skip:_ 10': 0.22; 'skip:p 30': 0.23; 'to:name
:python-list@python.org': 0.24; 'url:listinfo': 0.25; 'cover':
0.26; 'header:Received:9': 0.26; 'opening': 0.26; 'received:edu':
0.26; 'bit': 0.27; 'done': 0.28; 'email addr:python.org&gt;':
0.28; 'seem': 0.31; 'module': 0.31; "doesn't": 0.32; 'objects':
0.32; 'python-list': 0.32; 'but': 0.32; "i'm": 0.33; 'there':
0.33; 'header:In-Reply-To:1': 0.34; 'received:filterd': 0.37;
'received:pps.filterd': 0.37; 'special': 0.37; "it's": 0.37;
'class': 0.37; 'skip:_ 30': 0.37; 'this.': 0.37; 'url-
ip:13.107/16': 0.38; 'could': 0.38; 'put': 0.38; 'date:': 0.39;
'use': 0.39; 'define': 0.40; 'email.': 0.61; 'method': 0.61;
'from:': 0.62; 'to:': 0.62; 'skip:i 20': 0.62; 'feel': 0.63;
'pass': 0.64; 're:': 0.64; 'skip:t 40': 0.64; 'look': 0.65;
'well': 0.65; 'improve': 0.66; 'url-ip:52.6/16': 0.69; 'skip:f
20': 0.75; 'clicking': 0.76; 'links.': 0.81; 'known': 0.84;
'11:36': 0.84; 'attention:': 0.84; 'cleaner,': 0.84; 'email
name:&lt;python-list': 0.84; 'factory': 0.84; 'saturday,': 0.84;
'skip:& 50': 0.84; 'skip:= 70': 0.84; 'type.': 0.84; 'meets': 0.91
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uchc.edu;
h=from : to : subject :
date : message-id : references : in-reply-to : content-type :
mime-version; s=UCHC03162020;
bh=KJjUjn7MoQhMgb1kwfRyE7k3e2iyLyOka54z/sD3+tg=;
b=DN5f71bY3t6OYOjLMhR8n9Zq26t+x0XjHUI+Tfb6jj5Ed6aijYcmsWW6K4t0Z1L+gaaY
l1GLMzi825WYyPFgjQZc3N11wBAjeZTjohXUgNar7EM+R5oiF1T1qUiHPdSs26EXzExr
VJaUPpP+giglWUbIs0lqw5Fv5M6nL6iD0cgWU0PyY0tzYE+IfQrTlwCRVWO2OZAl7bVw
FIdARCQBuAH91rzQedF+ijDLQ3eIYBnlWLzGBjiSoNtwYyDGNuztduVP9lmf0U1QegeC
zgG5FW2/9HNMDDztkZtCp0fvQ8MTbUy4eKgSXxjAuHPaVK3N80X0rgghmucdXFpY6bgP Xw==
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
b=Y5r1Jx+siphevnrq5z3TiuCBRNe/5dODSV9wxRWBNFrNgsUr0m55DZYf/HzjcAPp/dW9mRZ1yrxb5XG7batu6fjOCK/y5lkGwXghIZUnThx83afiYxADTcck7LmUOHxq/UdC7plLYkWrW43JDoU6Y7tBbdiHFzmNad8G6vlVblsE+F+tMnmPX9Y0sfuzwrbj/1vPqPVy39P2WeomMH47F66URpI4cD6g4RXIQ4F/8+3YcWs9atLmdS9MaDpuF1TnxnJrGuI3ycLcmai6PfOE0m0ofyg4wgzvag8eGdWaBiXfkdiVfFAD1OhkbglaZDR39xJEva12mWeY8fU+O3pR2A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector9901;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=KJjUjn7MoQhMgb1kwfRyE7k3e2iyLyOka54z/sD3+tg=;
b=GCnWbU9TjRR4h4yF8GoO1xS3Fcvg8fG6xazFFtH9H2h2yLcElwq4OOErG0RCjdMoHxd6MdZTLX6waLmFakuP2jaiot3UKz75A0OsncBIYpE7L+saKWTXn90hn2Vd9wFpjr5nRu7lfm4UWJMYbdI3Ldq20Q7yv6ZlsfEcPbdXSctBpRivGDvyKKklcWUoY69BEAL82S7o7hGMX1R3trzgwd5u18qmC17rcsW2qoPCff6Mg0H7wvkFqlnPPINq+cDBhJcVnide/zFMYzl3tJPZK2Gd2QCJ4t2Kmiwly+Rw2Hp3QEsAArqPhnzSG8ZiGnDPxNqtjj1EYU+n+B1DQOVQKg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=uchc.edu; dmarc=pass action=none header.from=uchc.edu;
dkim=pass header.d=uchc.edu; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uchc.onmicrosoft.com;
s=selector2-uchc-onmicrosoft-com;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=KJjUjn7MoQhMgb1kwfRyE7k3e2iyLyOka54z/sD3+tg=;
b=T5ZIZLCu7PELrPiyv9s3oJMjj2S7iQ4dkDs5+I4fGzukSlwWBjUq6YXW027p+hLLquBdNt1bWeYD8oC4aIUR3ck7G3ms/zfcSP58iAd0N51RP92ZRIpKR24J34aggi0wvLzH+6YXXKbxr/7+iIPzGkdb6IJvYC4ZvfOld9QSzKg=
Thread-Topic: Dealing with non-callable classmethod objects
Thread-Index: AQHY9hTqqUuG50zl9kSH11yjoOoPqa46Ux6AgAEp9wCAAB9n2A==
In-Reply-To: <b79fac3a-da32-d4fc-a4da-051e14694d87@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA1PR14MB5855:EE_|DM6PR14MB3871:EE_
x-ms-office365-filtering-correlation-id: 865ad926-e7c4-4d5b-aeb9-08dac4ddf031
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 4DUvIm+0Ni/pfFOxnrvDhVLvu/hnkrWBAIiZsys7bO3T5WJ+DVLCPPDbzfEXq+gv2VZT511+P3wMyPHyUNNEMuYnLdtqIwAmUkjc4v7yggBEfTC64cI6gpDOxD7DO5yM38T6Yu1kAwSaZfOuXUmm42//l16/AqoEHXtAZVhZbb1Kp38gVdzWjdm2fhl5lkU/kjRrssXJm62EVlTZ00Hd9IvXakN8I6aNwMKmXF6/+Vs6/eWsotDl93SibXYMLtog00icbzCUz+kI4IlvhXUfmfF08qGCqJ/G+SeFSpVVCY9XzBKE715psoYL+w4qlpZf55G8ljNmVxoyOdOVQWWbGlbXvdpT/4sTq8mGD70TbDVuhX8FhMFZubpun4CWV4Kbfi3FvOh9Ay1YZbQbA6kmbL9kw+4BgiTsLuXKi6uBOHBiwRmB88NBdazLdozYfCaiRWujtCzB0GGThC9SoLeR7SaSXJuz0bsLAN4rvKq1BRdSbAwYhfKdbdEoqA5ghJr+TDBYksfOXK/EgeY2qb/JwH8Ty1czlsGcFkofa9ldshnF2QdQLxJJA2FN5Md9FBRktzTroJ+aIMGs7N7p1vgswJlUJ08SZTpQPpd3JeN3rA0KuIkSEs1bnMN2g0CbPziHZHPR1hgkvt9jdp39VJ9L5yCsjIHBOeeLWHdpZx5RD2gYIy7lmBtWwP2CN5ZSyYjekeuHotvt0Bz4xWtZNJQ+Xq0du4JMO1nG80HMe1bnDjOwkFi+DBMLOX8zCpr7W6qPB8aZ/RaZK9NLCHw1FgP7fQItB0YpGshrLMpetM9As/c=
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
IPV:NLI; SFV:NSPM; H:SA1PR14MB5855.namprd14.prod.outlook.com; PTR:; CAT:NONE;
SFS:(13230022)(396003)(376002)(136003)(346002)(39850400004)(366004)(451199015)(8936002)(52536014)(2906002)(5660300002)(66899015)(41300700001)(966005)(110136005)(66556008)(786003)(76116006)(8676002)(91956017)(316002)(478600001)(71200400001)(33656002)(64756008)(66446008)(66476007)(66946007)(53546011)(7696005)(6506007)(26005)(86362001)(186003)(83380400001)(9686003)(41320700001)(38070700005)(38100700002)(166002)(75432002)(55016003)(122000001);
DIR:OUT; SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: SNGnhkicm2Tw23yGIMxLcaJf4/njSg4T2pRQ/XmfWn5dXZ3sB77ZahVBpaXy
sFMb93sKSNk6iGrhKrGnRs/ciFJHE39SDuuYktcLtmXlEDF83RaeC8NXUx9x
aaZrKvKzQVkpzqd/erZx3x66PxKxYJqxDLRBtMsFhbTAn6xFPtum6a0kAUxG
sm2DnQCNej1bwg225jX3FtQ8T7IIw+wKNrASz7HCSKvB7jCoEMtXPxfcbCEm
0fqb7RfGL1Vs+tIJsOFjdDMnFeCz0m5bitEDWTdBMLQiIP52XnynMooSqia+
9xPT4RNFW9f4k4Z3/W/TZh49Bi6Hsr5cK8mnsG23vhj7IzeePdNcTZ1xC0rP
cTP/UotHBwmnmQUHivb4TCNbO1j/Y2HPnJv6o8bA3kDmaR5M+0C/So32FHJi
0LUZBHfiMVz63TcKqNV3jxq01tfjLCukF+Pz1LedjzHgG/SNERWw3TprEaI2
7DZdZmy4pUdaKkmBlSjqRDOQTHDYyT8ktC+HY7hgpmZIR3TTmiXu2/RgdFSn
kCV9fm4o/qXjz50mKbPDmrZLwN4z0tRDfUHveCz9O4+yROXoiAEEMvVPWxD3
yDH+QUZVLmwneBgLYKHVxYaX9TGWzLk+zn0hOkTiMdXsqEzC2GZ2H0kER9ja
aXrQGnGf4emu9UnA1NQLDbGy3+Q08AGuJ4M01UskF6PDCwLP1FB5+cwacRPA
vaVHIDuf2buei06xl5y8+OPPtpdsrVH2auMGmHP/ycSIkCkoWCCmE1cFvL8r
ku706WQgkbMASfR+HbkoXPP+Gvu5Kmu1aa+DAekvmNYDPCS7mM9iLCaHNRPQ
2X0QA6hO38vkYRBs29pelJDuCqnqGCJyheSu66z3NeZAGfHfkGuCBOVa54GM
vnmF6hletkN5Sxwvcm8MgCle5XOMi+tLBt40PwHzzVPZ35T88C5q7ypiMyt/
IRaq/v3qyNcbFldffNkcjMS1KpesYrWFf8W5KPzQkN5tU6n+XgZFrYu3zjsy
iPKc0W7iAVL7lRH1bRLOnGlCVCHb5lCdHUcHG9zKwgFG/gbRdmzEEeOU17wm
rAKBRdL8HEhy1XshhiAw5U23JGci7sVYks2IMUewuxDMpXL8mSY/lfwo1NMI
r0k+iQwGGAyxryAl0OziiQSBmzxNuHNqVsFPrDgoivZHBcoe7Hvk9zwU1AhG
iFdE9T8RTNBKH/fw6IFKdMn0gnKuY+P3z2l844JYHm1d4y0KZcalHoSKPMwn
TSNAX1p3tFPWy6uedgms+LoUYHYN29EjwKgKWWlK0859w3q1U6JkGmGZZoFY
VtCxKdnxXy/SuBqEmADpms33KVEuJugd5zbRtHuQ0CP7xpT2a31LENI0FLiX
h2jedXZnJQU+7UVHBNuUm/xP79HmSom31oVonAw5rVwYaK5aQus0/VJWVksk
XYuH6MUJ4Vxaam5vbeRcGONP4MHR5aB56bzCmNITZmK7E7wkp1rWw3xnChNr
8dwVgKQKLIEcd8/BUGVKoPU/EKxQgXglk/Uv40mChXB+KnZosyV9ZtnxqaRa
8VKO98q0TBxlanFo5RiW5UIkb9YM5XmUX4/kAfFQKh67YwPXN0gmYeel17Do
9w==
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA1PR14MB5855.namprd14.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 865ad926-e7c4-4d5b-aeb9-08dac4ddf031
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Nov 2022 18:44:32.2325 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 5c82d83a-818a-4c16-b540-ded2344a7ad3
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: DrR/CB371fLhts6OkqY4BGYlE5ciqSVMWceF7Ws/216crmK2iYTw/M/FS6ONvr3R2cXPJQmLKuA/c5rn36r6Pw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR14MB3871
X-Proofpoint-ORIG-GUID: GYN-I0pq-cangfGF5xAxeQupn3UBss7Z
X-Proofpoint-GUID: GYN-I0pq-cangfGF5xAxeQupn3UBss7Z
X-Proofpoint-Virus-Version: vendor=baseguard
engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1
definitions=2022-11-12_13,2022-11-11_01,2022-06-22_01
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
priorityscore=1501
mlxlogscore=999 phishscore=0 adultscore=0 clxscore=1011 malwarescore=0
suspectscore=0 bulkscore=0 impostorscore=0 mlxscore=0 spamscore=0
lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1
engine=8.12.0-2210170000 definitions=main-2211120142
X-Content-Filtered-By: Mailman/MimeDel 2.1.39
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: General discussion list for the Python programming language
<python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
<mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
<mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <SA1PR14MB5855109709408A32B86878F9B9039@SA1PR14MB5855.namprd14.prod.outlook.com>
X-Mailman-Original-References: <b4954329-dded-fded-2dbb-035357ac55c1@gmail.com>
<Y27RHc8oJsin8pge@cskk.homeip.net>
<b79fac3a-da32-d4fc-a4da-051e14694d87@gmail.com>
 by: Weatherby,Gerard - Sat, 12 Nov 2022 18:44 UTC

Use the inspect module as Cameron suggested.

import inspect

def analyze_class(clzz):
"""Analyze a class proof of concept"""
assert inspect.isclass(clzz)
for k, v in inspect.getmembers(clzz, lambda v: inspect.isfunction(v) or inspect.ismethod(v)):
if inspect.ismethod(v):
print(f"{v.__qualname__} -> class method ")
if inspect.isfunction(v):
sig = inspect.signature(v)
names = [n for n, _ in sig.parameters.items()]
if len(names) > 0 and str(names[0]) == 'self':
print(f"{v.__qualname__}-> probably a bound method ")
else:
print(f"{v.__qualname__}-> probably a static method ")

class Demo:

@classmethod
def us(cls):
print(cls.__name__)

@staticmethod
def double(x):
return x + x

def triple(self, y):
return 3 * y

analyze_class(Demo)

output:

Demo.double-> probably a static method
Demo.triple-> probably a bound method
Demo.us -> class method

From: Python-list <python-list-bounces+gweatherby=uchc.edu@python.org> on behalf of Ian Pilcher <arequipeno@gmail.com>
Date: Saturday, November 12, 2022 at 11:36 AM
To: python-list@python.org <python-list@python.org>
Subject: Re: Dealing with non-callable classmethod objects
*** Attention: This is an external email. Use caution responding, opening attachments or clicking on links. ***

On 11/11/22 16:47, Cameron Simpson wrote:
> On 11Nov2022 15:29, Ian Pilcher <arequipeno@gmail.com> wrote:
>> * Can I improve the 'if callable(factory):' test above? This treats
>> all non-callable objects as classmethods, which is obviously not
>> correct. Ideally, I would check specifically for a classmethod, but
>> there doesn't seem to be any literal against which I could check the
>> factory's type.
>
> Yeah, it does feel a bit touchy feely.
>
> You could see if the `inspect` module tells you more precise things
> about the `factory`.
>
> The other suggestion I have is to put the method name in `_attrs`; if
> that's a `str` you could special case it as a well known type for the
> factory and look it up with `getattr(cls,factory)`.

So I've done this.

class _HasUnboundClassMethod(object):
@classmethod
def _classmethod(cls):
pass # pragma: no cover
_methods = [ _classmethod ]

_ClassMethodType = type(_HasUnboundClassMethod._methods[0])

Which allows me to do this:

def __init__(self, d):
for attr, factory in self._attrs.items():
if callable(factory):
value = factory(d[attr])
else:
assert type(factory) is self._ClassMethodType
value = factory.__func__(type(self), d[attr])
setattr(self, attr, value)

It's a bit cleaner, although I'm not thrilled about having a throwaway
class, just to define a literal that ought to be provided by the
runtime.

--
=======================================================================Google Where SkyNet meets Idiocracy
=======================================================================
--
https://urldefense.com/v3/__https://mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!nx6jxVGHt4Gj1WplLAV4uuhaMyS7Ry0qTCGvZm7jLCj9GbK4vto49sfmP12TTgcAT6Akjz5hJWw9JoylO_FrgQ$<https://urldefense.com/v3/__https:/mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!nx6jxVGHt4Gj1WplLAV4uuhaMyS7Ry0qTCGvZm7jLCj9GbK4vto49sfmP12TTgcAT6Akjz5hJWw9JoylO_FrgQ$>

1
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor