You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串生成变量?用函数创建指定名称的bankacc类实例

解决方案:动态创建变量与类实例

一、字符串转为变量的通用实现

直接生成全局变量可以用Python的globals()字典(它存储了全局命名空间的所有变量),实现起来很简单:

def createNewVariable(name, value):
    # 把变量名作为键,值作为对应内容存入全局命名空间
    globals()[name] = value

# 调用测试
createNewVariable("Var1", 20)
print(Var1)  # 输出 20

不过要注意:直接操作全局变量并不推荐,因为容易导致命名冲突,代码可读性和维护性变差。更稳妥的方式是用一个自定义字典来管理这些动态创建的“变量”:

custom_vars = {}

def createNewVariable(name, value):
    custom_vars[name] = value

createNewVariable("Var1", 20)
print(custom_vars["Var1"])  # 输出 20

二、创建指定名称的bankacc类实例问题

你的原有代码无法生效,是因为函数里的Name是局部变量,函数执行结束后这个变量就会被销毁,根本没关联到全局的Peter变量。这里有两种可行的解决方式:

方式1:通过globals()创建全局实例

修改你的createbankacc函数,直接把实例存入全局命名空间:

class bankacc:
    balance = 0
    number = 0
    def __init__(self, balance, number):
        self.balance = balance
        self.number = number
    def pay(self, value):
        self.balance = self.balance + value

def createbankacc(Name, Balance, Number):
    # 将实例存入全局命名空间,键为传入的Name字符串
    globals()[Name] = bankacc(Balance, Number)

# 调用测试
createbankacc("Peter", 100, 1)
Peter.pay(50)
print(Peter.balance)  # 输出 150

方式2:用字典统一管理账户(推荐)

和前面的思路一样,用字典来存储所有账户实例,避免污染全局命名空间,还能方便地管理所有账户:

class bankacc:
    balance = 0
    number = 0
    def __init__(self, balance, number):
        self.balance = balance
        self.number = number
    def pay(self, value):
        self.balance = self.balance + value

# 创建一个字典来管理所有银行账户
bank_accounts = {}

def createbankacc(Name, Balance, Number):
    bank_accounts[Name] = bankacc(Balance, Number)

# 调用测试
createbankacc("Peter", 100, 1)
bank_accounts["Peter"].pay(50)
print(bank_accounts["Peter"].balance)  # 输出 150

# 还能轻松遍历所有账户
for name, account in bank_accounts.items():
    print(f"账户{name}:余额{account.balance},账号{account.number}")

这种方式更符合Python的最佳实践,代码更清晰,也更容易排查问题。

内容的提问来源于stack exchange,提问作者ProProgrammee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:27:32