Python中不使用全局变量如何在__init__内调用用户输入函数的变量
修正后实现方案(完全无全局变量)
你可以通过以下两种常用方式实现需求,同时规避全局变量、修正原代码的语法问题:
方案1:邮箱输入逻辑内置在初始化流程中
适合需要在实例初始化时自动触发邮箱输入的场景,代码最简洁:
from typing import Text # 注意Python类声明用小写class,原代码的Class是错误写法 class GetDatabase(): # 单独封装邮箱输入的内部方法,可复用 def _user_email_input(self) -> Text: return input("what is your email") # __init__默认返回None,原代码标注返回Text不符合规范 def __init__(self, uri: Text = "localhost:2555", servername: Text = "schools"): self.uri = uri self.servername = servername # 直接调用内部方法获取输入,赋值给实例属性 self.me = self._user_email_input()
方案2:输入时机自主控制,将邮箱作为初始化参数传入
适合需要提前获取邮箱、或者输入逻辑和类实例化解耦的场景:
from typing import Text class GetDatabase(): # 新增user_id作为初始化入参 def __init__(self, user_id: Text, uri: Text = "localhost:2555", servername: Text = "schools"): self.uri = uri self.servername = servername self.me = user_id # 实例化前先获取用户输入,再把值传入初始化方法 if __name__ == "__main__": input_email = input("what is your email") db_instance = GetDatabase(user_id=input_email)
原代码的问题说明
- 类声明关键字
Class拼写错误,Python要求小写class - 类的普通实例方法第一个参数必须是
self,原代码的user_email_input方法未加该参数,运行会报错 __init__是类的初始化方法,默认返回空值None,标注返回值为Text不符合语法规范
内容的提问来源于stack exchange,提问作者Overture04
相关产品推荐
相关产品推荐

