在不使用全局的情况下使用用户输入从外部 class 调用函数
Calling a function from outside class with user input without using global
我试图避免使用全局,而是创建了一个 class。我在调用 class 时遇到问题,相反,我收到以下错误
TypeError: phone.__init__() missing 1 required positional argument: 'NUMBER_INPUT'
有什么想法吗?提前致谢!
class phone:
def __init__(self,NUMBER_INPUT):
self.NUMBER_INPUT = NUMBER_INPUT
def phone_number(self):
"""validate user input of phone number"""
while True:
self.NUMBER_INPUT = input("Please enter your phone number: ")
if re.fullmatch(r"\d{3}-\d{3}-\d{4}" ,self.NUMBER_INPUT):
print("You phone number is: " + self.NUMBER_INPUT)
break
print("Please enter a valid phone number ex. 123-456-5678")
phone().phone_number()
您必须在调用 phone()
时为 NUMBER_INPUT
提供一个值,例如 phone("123").phone_number()
。
但是如果您在构造函数中为 NUMBER_INPUT 使用虚拟值会更好,例如:
class phone:
def __init__(self):
self.NUMBER_INPUT = ""
def phone_number(self):
"""validate user input of phone number"""
while True:
self.NUMBER_INPUT = input("Please enter your phone number: ")
if re.fullmatch(r"\d{3}-\d{3}-\d{4}" ,self.NUMBER_INPUT):
print("You phone number is: " + self.NUMBER_INPUT)
break
print("Please enter a valid phone number ex. 123-456-5678")
phone().phone_number()
所以,我认为您既没有阅读文档,也没有 watched/read 任何关于 Python class 的教程。那我就在这里给大家解释一下。
Class 是一个“对象项目”。它可能有预定义的方法、预定义的值。它也可能有一种动态构造这些的方法。
Class对象首先需要实例化,然后初始化。这意味着首先你需要创建一个class的实例,然后初始化默认值。
Python 有 2 种方法。
__new__()
创建一个 class 和 returns 的新实例。它已经为每个 Python class 实现,但可能有特殊情况需要您覆盖它。
__init__(*args, **kwargs)
初始化 class 的值。您必须在此处或全局定义 non-static 值 class.
因此,在 python 中创建一个 class 对象是通过这样调用 class 实现的
A_instance = A(*args, **kwargs)
字面意思是create me instance of A with these args and kwargs
所以在您的代码中,您正在使用(实际上覆盖)__init__(*args, **kwargs)
与 args = (NUMBER_INPUT,)
和 kwargs = None
。
因此,每次创建 phone 的对象时都必须提供 NUMBER_INPUT,如下所示:
phone1 = phone("123-456-7890")
phone2 = phone("098-765-4321")
我试图避免使用全局,而是创建了一个 class。我在调用 class 时遇到问题,相反,我收到以下错误
TypeError: phone.__init__() missing 1 required positional argument: 'NUMBER_INPUT'
有什么想法吗?提前致谢!
class phone:
def __init__(self,NUMBER_INPUT):
self.NUMBER_INPUT = NUMBER_INPUT
def phone_number(self):
"""validate user input of phone number"""
while True:
self.NUMBER_INPUT = input("Please enter your phone number: ")
if re.fullmatch(r"\d{3}-\d{3}-\d{4}" ,self.NUMBER_INPUT):
print("You phone number is: " + self.NUMBER_INPUT)
break
print("Please enter a valid phone number ex. 123-456-5678")
phone().phone_number()
您必须在调用 phone()
时为 NUMBER_INPUT
提供一个值,例如 phone("123").phone_number()
。
但是如果您在构造函数中为 NUMBER_INPUT 使用虚拟值会更好,例如:
class phone:
def __init__(self):
self.NUMBER_INPUT = ""
def phone_number(self):
"""validate user input of phone number"""
while True:
self.NUMBER_INPUT = input("Please enter your phone number: ")
if re.fullmatch(r"\d{3}-\d{3}-\d{4}" ,self.NUMBER_INPUT):
print("You phone number is: " + self.NUMBER_INPUT)
break
print("Please enter a valid phone number ex. 123-456-5678")
phone().phone_number()
所以,我认为您既没有阅读文档,也没有 watched/read 任何关于 Python class 的教程。那我就在这里给大家解释一下。
Class 是一个“对象项目”。它可能有预定义的方法、预定义的值。它也可能有一种动态构造这些的方法。
Class对象首先需要实例化,然后初始化。这意味着首先你需要创建一个class的实例,然后初始化默认值。
Python 有 2 种方法。
__new__()
创建一个 class 和 returns 的新实例。它已经为每个 Python class 实现,但可能有特殊情况需要您覆盖它。
__init__(*args, **kwargs)
初始化 class 的值。您必须在此处或全局定义 non-static 值 class.
因此,在 python 中创建一个 class 对象是通过这样调用 class 实现的
A_instance = A(*args, **kwargs)
字面意思是create me instance of A with these args and kwargs
所以在您的代码中,您正在使用(实际上覆盖)__init__(*args, **kwargs)
与 args = (NUMBER_INPUT,)
和 kwargs = None
。
因此,每次创建 phone 的对象时都必须提供 NUMBER_INPUT,如下所示:
phone1 = phone("123-456-7890")
phone2 = phone("098-765-4321")