Re: Dynamic classes

Liste des GroupesRevenir à cl python 
Sujet : Re: Dynamic classes
De : list1 (at) *nospam* tompassin.net (Thomas Passin)
Groupes : comp.lang.python
Date : 19. May 2025, 23:11:20
Autres entêtes
Message-ID : <mailman.65.1747692692.3008.python-list@python.org>
References : 1 2 3
User-Agent : Mozilla Thunderbird
On 5/19/2025 5:49 PM, Mats Wichmann via Python-list wrote:
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)
 
It's interesting that in Jython there is a way to do something conceptually similar to turn a Jython class into a Java class.  Here's one of mine:
synchronized CoordinatorType getCoord() {
     JythonObjectFactory factory = new JythonObjectFactory (
         // Type class, Jython module name, class name
         CoordinatorType.class, "Coordinator", "Coordinator");
     // Java class
     CoordinatorType coord = (CoordinatorType) factory.createObject();
     return coord;
}
// Instantiate a Coordinator
// Error handling elided for clarity
CoordinatorType c;
c = getCoord();

Date Sujet#  Auteur
19 May 25 o Re: Dynamic classes1Thomas Passin

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal