Rocksolid Light

Welcome to RetroBBS

mail  files  register  newsreader  groups  login

Message-ID:  

Remember Darwin; building a better mousetrap merely results in smarter mice.


devel / comp.lang.python / Re: Optional arguments in a class behave like class attributes.

SubjectAuthor
o Re: Optional arguments in a class behave like class attributes.Antoon Pardon

1
Re: Optional arguments in a class behave like class attributes.

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

  copy mid

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

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: antoon.pardon@vub.be (Antoon Pardon)
Newsgroups: comp.lang.python
Subject: Re: Optional arguments in a class behave like class attributes.
Date: Mon, 17 Oct 2022 20:13:40 +0200
Lines: 117
Message-ID: <mailman.744.1666030425.20444.python-list@python.org>
References: <CAMmiCvKHJFfT2aST7tHZSX_Bc-XJx6wKey2DvP4BP=f4dSNX0Q@mail.gmail.com>
<7a899996-c1fa-5b09-85ec-2c9cdd3e5495@vub.be>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Trace: news.uni-berlin.de JPoegQSD1OwLBl76tddXDwtsIMeVWw5gw//uM1nbE3uA==
Return-Path: <Antoon.Pardon@vub.be>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
reason="1024-bit key; unprotected key"
header.d=vub.be header.i=@vub.be header.b=DTajM/aa; dkim-adsp=pass;
dkim-atps=neutral
X-Spam-Status: OK 0.002
X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'skip:@ 10': 0.03; 'def':
0.04; 'parameter': 0.05; '"""': 0.09; 'always,': 0.09; 'else:':
0.09; 'hat': 0.09; 'question:': 0.09; 'subject:class': 0.09;
'-&gt;': 0.16; '2022,': 0.16; 'arguments': 0.16; 'attributes,':
0.16; 'defaults': 0.16; 'from:addr:antoon.pardon': 0.16;
'from:addr:vub.be': 0.16; 'from:name:antoon pardon': 0.16;
'message-id:@vub.be': 0.16; 'none:': 0.16; 'schreef': 0.16;
'wrapper': 0.16; 'python': 0.16; 'values': 0.17; 'probably': 0.17;
'to:addr:python-list': 0.20; 'all,': 0.20; 'skip:_ 10': 0.22;
'code': 0.23; 'tried': 0.26; 'object': 0.26; 'header:User-
Agent:1': 0.30; 'dec': 0.31; 'default': 0.31; 'lists,': 0.32;
'sep': 0.32; 'but': 0.32; 'header:In-Reply-To:1': 0.34;
'following': 0.35; 'using': 0.37; 'class': 0.37; 'list': 0.39;
'use': 0.39; 'break': 0.39; 'skip:h 10': 0.61; 'skip:i 20': 0.62;
'here': 0.62; 'skip:k 10': 0.64; 'skip:g 30': 0.64; 'your': 0.64;
'2015,': 0.69; 'del': 0.70; 'games': 0.70; 'name,': 0.75;
'signature': 0.76; 'received:eurprd01.prod.exchangelabs.com':
0.84; 'want.': 0.84; 'skip:n 40': 0.91
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
b=Emwg0lLYhRsOG/byAd0sYJHgm+wyzyhomR6W2F/f4lqEEPK6vlhpTp0USxsQiaxn9b68FcNV5ivFiaKDMl3ZM3phw5gB3vUhleH/AoERMnNyrJ+MKWtFnaJnfZ/ZyKQGONIakSZ8kA3sKlSG4aUYhpLrcENLQKGulheEqYTfKJ4zhtVfSwruzBtud/52K/Rs3r9l2SDbWsAosI3HUp9TbpPtFXn/JbDu7y0QTBr8TDgOdPnPSyI07ZE3HCpPr7Y7wRJmLLcM7KqOQ/GGYjvETd5rHOf50wcJAxXfnoGwKRGIA5v42OPYiLcjziT1lASjjrP5rkhpiOeNEjZefHR7iQ==
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=gO6hsVvA3IqYlTVraAz7xVP04SWnBpHRtZZ96rrP3kc=;
b=byUiIoPOeKwWnd9ioU9JFoLiGHnyTl8jBa6tLZS7XqFY44Qj1AB5EfRk21canCJqUSM7nRgmZc/+4+K7C+52u2G12ZTL8b6Mp+uw+IbHUZ7ba70AVAD9nqapuAq7KYZ9rFLXnLfIQjX8CZ6GNyoC5wjCn+6IVHyF45GWFH9kQoK0PYXA2I+944EQlR2EfaV0wlRgtyMcgcCdRZIcn/0SrcXiEjC6Uh3dRxt5ClbfCl6YDbh+A/wOZr8mlwF7Eqh+60GOjgb5RtICueH2tAMTqgNjt94hGmLrdQu79fZaN/SuiDc/6PE2FfesIqiKXB6Pp45RAlfQ0J6d/HczAUaP7g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=vub.be; dmarc=pass action=none header.from=vub.be; dkim=pass
header.d=vub.be; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vub.be; s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=gO6hsVvA3IqYlTVraAz7xVP04SWnBpHRtZZ96rrP3kc=;
b=DTajM/aaHZ+cVblX2KtAg0s5b4sE7JpqmiXx4LKvlRJWtwTYSVOV85ZqC/OJ1UNof8NNd+J+SnRvQleaCmX54FaV7Cg/JvnMqKEVBaDcMinXmjeyXVCz808TdS1bsa+Nug04xRLO4mvIA3t9Ho8Qg/N8GePlJLfyB9284AHocR8=
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=vub.be;
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Thunderbird/102.2.2
Content-Language: nl-BE
In-Reply-To: <CAMmiCvKHJFfT2aST7tHZSX_Bc-XJx6wKey2DvP4BP=f4dSNX0Q@mail.gmail.com>
X-ClientProxiedBy: AS4P190CA0032.EURP190.PROD.OUTLOOK.COM
(2603:10a6:20b:5d1::9) To AM0PR01MB4147.eurprd01.prod.exchangelabs.com
(2603:10a6:208:6a::12)
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: AM0PR01MB4147:EE_|AM8PR01MB7618:EE_
X-MS-Office365-Filtering-Correlation-Id: 9ad1ee3a-2a45-499d-658c-08dab06b5283
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 9NjYX3qZ5omprpNn+U4HE68BKwYPImvTbrVkcHy98I0q7KpJjpYiKX4cJHe97aedCbGu4A/1S1Jqqv0VRQdaNsH+GC087skfLYSBpitB5McJWe1jRBbPFEmGFbObDAZwkNujlsHz/bQL0hpl0FHfMn5yPH1BrfNHQ6XniJP25mlT51fl48AVAmSkhUu9EkSOxPyAL5fUy5Y6QTwT8i8Lh7gJKNHGelZqfOSDaJqQWtdfa0BASbQmvyJknMGIzkZoadqOLoyrxMkX8Gs4OABH+dSPG9QmoiTIA0Wy4xcR3drPd3Q39NTRa88cZehyIGearIv58lLHAinxmeGYudqokA/B4hvhUMkUTu0TKjji/3E0m4mQFakYegcT6+XIyDAmafcORlMLPSSK7ndixt///4z/TAf+Gov1KXJZiShLmO1cscXbS5MXgvwspsoBIh8wMNqKgPM0K6czSpKXBbU67uSDbhVV90EVlfIT/11AG361MxHk/cA40fdlZZlbJieMZZkhEcaGGRs0XC8anXMEXcaqbtCEGEuakbj6eHTOerjJXVULl1VULbaGB+saKacAwdZqcKDh5iVTb/YWfYo1Dxg6wEX/GGj9Dc41Oc5JAOyO8/sKo4L/7p8B1PnJxxHlKgT5z15/PBiQzZmTBbTJTvyWKPeUTg3WdJGDmD3nBU9dpAv/e2yzH68a7usDUJnMBVOomi++f3yc78OllaB2wst52+uiUkEttXeaq/r+jt7a1A4AVBIKuXKC/en1iK8U
X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
IPV:NLI; SFV:NSPM; H:AM0PR01MB4147.eurprd01.prod.exchangelabs.com; PTR:;
CAT:NONE;
SFS:(13230022)(4636009)(396003)(39860400002)(366004)(136003)(346002)(376002)(451199015)(36756003)(31686004)(38100700002)(8936002)(44832011)(5660300002)(31696002)(86362001)(6916009)(186003)(2616005)(6512007)(478600001)(6486002)(316002)(786003)(41320700001)(66476007)(66556008)(41300700001)(66946007)(8676002)(33964004)(6506007)(2906002)(43740500002);
DIR:OUT; SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: gIo8VHamhlxt0/RyRpSMFqtAkOpIkQeEi+wfKFqrXOeLe
iGUTzkapa59H+qA27Rbu9O1NUPg3koONmFel02SCPftlV
zdJ68nYxlTWZk/wsnvL1wPDHkz3srmGv6D62xUFuQ0AYB
bHWI1tING50Jhb/cz597ksde7/5X8I9AaMqFytOhTyPDF
01lrk5Y5ZIrZP/zMq3t+WtW0bkxxjKsSPv1Z+jZRplFVY
G2iazhqNFwU4UlajZtB+LaA+DDaxsOB1zGgQxHt5DqzOg
W2TFo5gLlrXNy8BhrlLdK4yDh/qwiOUYiAWCrt4xtne5B
jDcrJ4E9Q7ij4fUvV8+v4PwzWpiQH5Km+OLbE/LeTMG5+
ljXbu090AL31wWUj6WPgI09BMWA3ICQzFZ62/dONmqspG
GXQIzz3A8lA2xAQ9YTM1t7EOcIWjw0ZkTjNBZ9HORxQly
mabCAGr7x6hkVBzXNv+1YfpxOHj6dVuBinahziSgB5bFS
gv6MMi8mRtAeLpm+RMOmcH12khRAPEC9gqd8MQGvM+j+i
2we1lb6JIYGW100OMLk8K8k4PCwQN+/k1fwfVt8xb1WKa
RUEB9ltApZfGh5DtbXILCUizJ9O4Vw9tsWJFDnjkLkfku
0ZCNtk6tKNeJDDAAO8pCLpUHT+OfPNVby6inm/H3Z+5f2
62+GntXVLF+PTGW+Cwaa/SgaqS/7IgSowIGgLuaPUpq42
c3gMYSsbKoxeDvdppxIllKVs8Igu2RbPECcmI7b6u8BSw
2qHCdo0qjL2O5cdk5zzilrTKxn/sqWNUEcFVgG9Z/kBwV
LkTbcmhTm9LfieqWJ9+tF460TfQLBgLiH8oZ4g3muYu37
Y0azFnB9gUJc0M0l4UFGZBQB8fhgvGW2JmtInae+xrvNv
iw7sj/FJW3sLMaIZGqSE7t3fNhsz8jKH00YmAylyn5lwC
AGjygVa7E18DtXfIwNqVFkG8kqBU2qQaY67PIK+27NRzE
SmDVZ1/Mqst37w5A5fyIqeC1V6ExoryMOw1ll4EwkTCPW
vZwqkRa7EgjQCSLCCycVN1ecp8WSY+z4IT+0iHAlUvIUR
pWd6WgZm0kFBkRDEWxC39FgFqyUyiJyDa2pQYO+KiANG7
RS3R60fIW/WIv/C6tAN4uTKUtRoTJa7b8l2DigswgXW6N
E+a9wq1O8vXLIqF+leyrL10KwwXNkpmfkukQ/jaqPmKqR
9r4xKitUNyJrthv01OivSavLiQFb9T3FWUlq0RPMpeHfL
/rHwIzFo9YSGWkEdCK4ZqRTUjJlNSm+JLesa85RKx7JtU
InBhEaBYo+Wm4YOVGdqPQwdv5g/QK8TXeZiT2gJ3WuQGD
cAsBC/GNBhzG3kEexFAZKBvVcGE0hSKNlLtwo2X5gk1Te
DLRbl2I598M2TxdnYQ8uQzI0zWiP9h/LC/Kh+VuVzDA8Z
XmAWdNwvPtvFHhmjGxrvYVtuH0u7sIXXjDwFLrptyJX8K
MxNUZN0wWNdL8QD8LuWIZD6IRqc7YZUo/5WXiyql3U0KV
bIbcMNt42fb4w5oWPHqLvZOc+/rycKRl4hxTqV1qwUPi2
Ap8DsGfEGt+lHxae5Ys+BIFrCCPUunOqJ6BtT4HgPQvND
Ng/7/nYWfy5lo23efzMCvKuU7kd5XyeP0nGa1mm3GEJO
X-OriginatorOrg: vub.be
X-MS-Exchange-CrossTenant-Network-Message-Id: 9ad1ee3a-2a45-499d-658c-08dab06b5283
X-MS-Exchange-CrossTenant-AuthSource: AM0PR01MB4147.eurprd01.prod.exchangelabs.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 18:13:41.9928 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 695b7ca8-2da8-4545-a2da-42d03784e585
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: bILJ2etPIWW2EhrrXh9wCnXj5rIL9TXuc+gFv6K7ZWz+OQyIG6NJdqKNjktmvbAH9ymh9dWGCuFGrjRyYaF/jw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR01MB7618
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: <7a899996-c1fa-5b09-85ec-2c9cdd3e5495@vub.be>
X-Mailman-Original-References: <CAMmiCvKHJFfT2aST7tHZSX_Bc-XJx6wKey2DvP4BP=f4dSNX0Q@mail.gmail.com>
 by: Antoon Pardon - Mon, 17 Oct 2022 18:13 UTC

You can use the following decorator for what you probably want.

def copy_defaults(func):
"""
This decorator makes that defaults values are copied on a call.
"""

signature = inspect.signature(func)
parameter_items = list(signature.parameters.items())

@wraps(func)
def wrapper(*args, **kwds):
newargs = list(args)
tail_parameters = parameter_items[len(args):]
for name, parameter in tail_parameters:
try:
newargs.append(kwds[name])
del kwds[name]
except KeyError:
if parameter.default is not Parameter.empty:
newargs.append(copy.deepcopy(parameter.default))
else:
break
return func(*newargs, **kwds)

return wrapper

class GameOne:
@copy_defaults
def __init__(self, games = []) -> None:
self.games = games

# Results I got after using this decorator in your code

Using a list []
Using a dictionary {}
Using an object []

Op 16/10/2022 om 12:48 schreef Abderrahim Adrabi:
> Hi all,
>
> I tried to create a class with some optional arguments as always, but this
> time I used the default values to be lists, dictionaries, and object
> references.
>
> So, these default values behave like class attributes, here is a demo:
>
> # Using a list -----------------------------
> class GameOne:
> def __init__(self, games = []) -> None:
> self.games = games
>
> h = GameOne()
> h.games.append("List, the first round")
>
> g = GameOne()
> g.games.append("List, the second round")
>
> k = GameOne()
> print('Using a list', k.games)
>
> # Using a dictionary --------------------------
> class GameTwo:
> def __init__(self, games = {}) -> None:
> self.games = games
>
> h = GameTwo()
> h.games['1er'] = "Dictionary, the first round"
>
> g = GameTwo()
> g.games['2ed'] = "Dictionary, the second round"
>
> k = GameTwo()
> print('Using a dictionary', k.games)
>
> # Using an object ------------------------------
> class Bonus:
> def __init__(self) -> None:
> self.stages = []
>
> class GameThree:
> def __init__(self, bonus = Bonus()) -> None:
> self.bonus = bonus
>
> h = GameThree()
> h.bonus.stages.append('Object, the first round')
>
> g = GameThree()
> g.bonus.stages.append('Object, the second round')
>
> k = GameThree()
> print('Using an object', k.bonus.stages)
>
> # Results ----------------------------------------
>
> Using a list ['List, the first round', 'List, the second round']
> Using a dictionary {'1er': 'Dictionary, the first round', '2ed':
> 'Dictionary, the second round'}
> Using an object ['Object, the first round', 'Object, the second round']
>
> # Used Python versions ---------------------------
>
> 3.5.1 (default, Dec 9 2015, 14:41:32)
> [GCC 5.2.0]
>
> 3.7.14 (default, Sep 8 2022, 00:06:44)
> [GCC 7.5.0]
>
> 3.8.6 (default, Jan 29 2021, 17:38:16)
> [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)]
>
> 3.9.9 (main, Nov 20 2021, 21:30:06)
> [GCC 11.1.0]
>
> My question: Is this normal behavior?
>
> Thanks.


devel / comp.lang.python / Re: Optional arguments in a class behave like class attributes.

1
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor