Deutsch English Français Italiano |
<mailman.64.1747691398.3008.python-list@python.org> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder8.news.weretis.net!fu-berlin.de!uni-berlin.de!not-for-mail From: Mats Wichmann <mats@wichmann.us> Newsgroups: comp.lang.python Subject: Re: Dynamic classes Date: Mon, 19 May 2025 15:49:53 -0600 Lines: 47 Message-ID: <mailman.64.1747691398.3008.python-list@python.org> References: <CAApdmf3UwA6zf2-eSfd=1U=Unx3-6PUj6+XS0Sp62rkn73C8iQ@mail.gmail.com> <385fb601-4061-4785-809a-94ee1e6c4e11@wichmann.us> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: news.uni-berlin.de 1LsXnNvFcyyQ4opnZE3X0g1Lab5fXla1VOqYHJLshkAA== Cancel-Lock: sha1:IkEEfUo3jAFyao1AZoOQIQ7kiXI= sha256:S2+j76NLljNaeHOeFFYEJLHRugVTRbZFvVhuRG5Hu+w= Return-Path: <mats@wichmann.us> 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=wichmann.us header.i=@wichmann.us header.b=RRu+uADn; dkim-adsp=pass; dkim-atps=neutral X-Spam-Status: OK 0.042 X-Spam-Evidence: '*H*': 0.92; '*S*': 0.00; 'def': 0.04; 'fails': 0.09; 'account)': 0.16; 'init': 0.16; 'instance': 0.16; 'received:10.202': 0.16; 'received:10.202.2': 0.16; 'received:internal': 0.16; 'received:messagingengine.com': 0.16; 'unpacking': 0.16; 'variables,': 0.16; 'wrote:': 0.16; 'to:addr :python-list': 0.20; "i've": 0.22; 'skip:_ 10': 0.22; 'done': 0.28; 'header:User-Agent:1': 0.30; 'blog': 0.30; 'present': 0.30; '"",': 0.32; 'python-list': 0.32; 'subject:Dynamic': 0.32; 'but': 0.32; 'header:In-Reply-To:1': 0.35; 'following': 0.35; 'using': 0.37; 'class': 0.37; 'something': 0.39; 'try': 0.40; 'similar': 0.63; 'skip:m 20': 0.63; 'rate': 0.67; 'accept': 0.67; 'name,': 0.75; 'btw': 0.84; 'stating': 0.84; 'ancient': 0.91; 'received:103': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wichmann.us; h= cc:content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm1; t=1747691395; x=1747777795; bh=bT8PfqDS6Q6m6xtZGgqoVNd8rs5HijANxO8q/92Rlr0=; b= RRu+uADnZnHSRfPe6cQYVBD5xhQrbL5TodhFwA5u4AM4KTPMr8XUBxKGHnNYq9Wi OCSnm9F3mQwpCJ21aYa5U8KoxKjkjXok11l16XoxV9z1RiwV/2LTCUFb/HHvD82h LytkC+NQNPtGv5fdTkvnsC9nHjR9PQLMwDK+rOqtB6828bOef8lRLQV8bhTu05Ro fpczC5TA1gKvZ5stigMBmbhSHlmg28sMBWF9gPwY4CMqn5EDAinzLE+fmPftKIV2 1/sepKiyC5EYWLzEHyjb4RaK04t+cdzXnImzu8Ssgm0VLU8G70iqAMB5+NYs14fk lIet1dBD9CegrKYR+6X7Bw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; t=1747691395; x=1747777795; bh=b T8PfqDS6Q6m6xtZGgqoVNd8rs5HijANxO8q/92Rlr0=; b=iptrjNV3yZcvUMyLc OOhXD8hAVwTQE+jc78nGq0FB/ctjxPPuV8vF7PaiDdUyVg8NuXnKfn/iy8AQHMVP r4whmWxK+1VvTyVmUNGzHJNJXA7qiMJShY1cwYsOmhfLBcY6473eM+/+Mc0K1Fts aOe35cIQKSjQeoakIO8EHNn8ZOLhtZJeEwyHNlMTAE9s2M2js4PWdVEEraUzEury 8FZR8O0uSHNUXVjmmtmgPWPULrnHF0zCBYzP+ToE4S0swyrqlIDvNAAz5RxVHgpS 1Wh/wPLiRkCGmWeHsgE/T5VQFuy7wn0lfXWGTrKwO6XVXoohOIv0dkdYYRnppArn ZIwEw== X-ME-Sender: <xms:gqcraE9Yb_jyT24I7CIin6zARF2xyx8_Fi5j5cCxv9CnMh7ia_B6NQ> <xme:gqcraMuviQMzSCx46tIdZBhvCPeQEfGRvPKOP-10eAO7ponHhchV2jDB03plpXj2b D-huxlgQSmT-luIGGg> X-ME-Received: <xmr:gqcraKCTFEYx6g8DIRJZLrFypvTk4gT3M5OmR2YLdX_vUxlFaDKNC3-OP0qYAChk0bZZBzNuJHNUtnKjWu_8HeTDHnSYkQY6MQ> X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdefvddvhedtucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpefkff ggfgfuvfhfhfgjtgfgsehtjeertddtvdejnecuhfhrohhmpeforghtshcuhghitghhmhgr nhhnuceomhgrthhsseifihgthhhmrghnnhdruhhsqeenucggtffrrghtthgvrhhnpedtje duveeiteegteejgeehiedufeekgfdvjefgvedtteduffeuieelieevtdegffenucevlhhu shhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehmrghtshesfihitg hhmhgrnhhnrdhushdpnhgspghrtghpthhtohepuddpmhhouggvpehsmhhtphhouhhtpdhr tghpthhtohepphihthhhohhnqdhlihhsthesphihthhhohhnrdhorhhg X-ME-Proxy: <xmx:g6craEcHyG899kWH3I8GtjPWAtYKTXhTT-7zDqAsTInwvkdf2hTOBA> <xmx:g6craJOnbNLRwQJQrBz_J5FowIViVSN0gDuHI7gpCLiHiLSNJDvZ_A> <xmx:g6craOkHPK15yQ00NvqRTa3oTDS6Whmxsh8hFbwtThTmpkqJaKTOfA> <xmx:g6craLtFFH3yJPJfVy1PmDAe8uBxzL7_R44AETJq7XtlMkYsLMZXUQ> <xmx:g6craMfCurPcdT5USWxqvy4SHK_NjPmFfBN-IHnXYAGZXnE9J1uLfLKi> Feedback-ID: i387144f0:Fastmail User-Agent: Mozilla Thunderbird Content-Language: en-US Autocrypt: addr=mats@wichmann.us; keydata= xsDiBD9xp6oRBAC1vd3YI8Gcr1CxpV1gldNQu0uQsNaICDk+Ai3+R163s/P83JOYG+SBEA3P v7iZx70qpQ3RzP7KrjF1Nm6j0em9ccUX2fPQUCAxXw5Hiq7CSMiwQQZRI6shcnyMh9XTKViT WK5MrKDyvjDEn7epjKzKwPS5SG039l6XaOKU0A4uGwCgsNqUQqC0gMMcbKlJV8ql58iKmbMD /ii8FPQrXmyS/FnsPs7UddV5qMHKm7NUH5oiKuMVyakInRyq9iIxuu3D4Ec6mWRKcGsjmIkW HXCSz0aefs6dsqNqpU54cYioJ3wP5LzHK7oclgJPryVt5Qezbdutf8SQf8gVkaNIlkxwGUzi bKTZ6CHzwlz9nNgeel0XPUcZzFxGA/4paeCg2rMSVuAhUQbsLYHu4XzTs9P16zaXkrtxc4m5 b+BF5xsLgTpyO5l859XudS2Gp+7/Y37dAU4QlyGGOboWmF1y9U5DnzBwG8ghsnym+ga58MJh LdRdQQ6xQolCpEXOuzm40f2r5uMxF3KOJ7WpIPuGAkeCPru9BmlATH+zOs0gTWF0cyBXaWNo bWFubiA8bWF0c0B3aWNobWFubi51cz7CYQQTEQIAIQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIX gAUCT0VyZwIZAQAKCRDAMaCQc9hUxiZBAJ9cWziGp7hVfsu5T+cQptc3rLNndQCgrZh8u5LW BfJ5e/Y+3PwZ8UEm+ELOwE0EP5is8BAEAMtwzcA8TYf5UTjDMgwcSNoErTc9ag+IX05QFgL8 aF8sfJRv5atcitqQy0gSIsOzI+L/AFdPN/+QQI3dL1tCq14t32KPDtigDhzm6jVPXX5z+V9u xnD8XTp+ZvNcWoHXjViM8aXeLLEiCpiVCho307h3XShvqoKINWRQWeAsKKDDAAMFA/48zaey wiiEyvI0meJ1KkNHxdLP0yLODr1WV6j9xkPkLWOaIDw7dlwEOlF1N1YtZ2wa0p1wsttdIbIx ffgwXmcH4zrdxUIMz3U0BqYzk5H+5cYFXECXTFVOmweS+JECYMj80PjRoKCO1eVO1N30zksB 36NnhZWPRWIhjK3ZarIYH8JGBBgRAgAGBQI/mKzwAAoJEMAxoJBz2FTG6VEAoKDYHfDp5Q3q PuPvPahCE9HsXMgAAJ9INTqcLSJrOfyJ8q95nBO1T26H2Q== In-Reply-To: <CAApdmf3UwA6zf2-eSfd=1U=Unx3-6PUj6+XS0Sp62rkn73C8iQ@mail.gmail.com> 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: <385fb601-4061-4785-809a-94ee1e6c4e11@wichmann.us> X-Mailman-Original-References: <CAApdmf3UwA6zf2-eSfd=1U=Unx3-6PUj6+XS0Sp62rkn73C8iQ@mail.gmail.com> Bytes: 8523 On 5/19/25 09:51, Jonathan Gossage via Python-list wrote: > I have created a dynamic class using the type() function: > x = type('MyFlags', (), {'Flag1': 1, 'Flag2': 2, 'Flag3: 4, ' '__init__' : > __init__}) > The new class is there, and the class variables, Flag1, Flag2, and Flag3, > are present correctly. However, when I try to create an instance of this > class with the following code: > y = x('Flag1', 'Flag2') > it fails with a TypeError stating that 'MyFlags' does not accept arguments. > What do I have to do to make this happen?. BTW __init__(self, *args) is > defined as the instance initializer. Might help if you show the init function. I've done something similar to this without trouble, but not using the unpacking (i.e. *args). I used this in an ancient blog post (thus, pre-typing, and such): def transact(acct, amount): acct.balance += amount def pay_interest(acct): acct.balance += acct.balance * acct.interest_rate def account_init(acct, num, name, bal, rate): acct.acct_number = num acct.acct_holder = name acct.balance = bal acct.interest_rate = rate account = { "acct_number": "XXX", "acct_holder": "", "balance": 0.0, "interest_rate": 0.0, "transact": transact, "pay_interest": pay_interest, "__init__": account_init, } AccountType = type("AccountType", (), account) myaccount = AccountType("1234567", "J. Q. Public", 20.0, 0.01) print(myaccount.balance) myaccount.transact(-10) print(myaccount.balance) myaccount.pay_interest() print(myaccount.balance)