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)