Python:如何从函数加载已创建的类?
我对这门语言很陌生,我一直面临以下问题: 我已经定义了一个类,我想使用一个函数创建该类的多个对象,但这似乎不起作用Python:如何从函数加载已创建的类?,python,function,class,Python,Function,Class,我对这门语言很陌生,我一直面临以下问题: 我已经定义了一个类,我想使用一个函数创建该类的多个对象,但这似乎不起作用 class age: def __init__ (self): self.age = value def function (name): global value value = 27 name = age() function("anna") print "Age:", anna.age 输出: Traceback (mos
class age:
def __init__ (self):
self.age = value
def function (name):
global value
value = 27
name = age()
function("anna")
print "Age:", anna.age
输出:
Traceback (most recent call last):
File "test.py", line 15, in <module>
print "Age:", anna.age
NameError: name 'anna' is not defined
Age: 27
输出:
Traceback (most recent call last):
File "test.py", line 15, in <module>
print "Age:", anna.age
NameError: name 'anna' is not defined
Age: 27
我想让第一个代码工作。。。有什么建议或想法吗?谢谢大家! 这里有几个错误。首先,我应该说你需要复习你的知识(阅读文档,阅读更多教程,等等)。因此,首先,您确实需要返回刚刚创建的对象。因此:
def function (name):
global value
value = 27
name = age() # This is weird. You've passed in `name`, only to re-assign it.
return name # Very important
anna = function("anna")
print "Age:", anna.age
其次,这门课没什么意义。。。它不应该被称为age
,只应该具有age
属性。我建议进行以下调整(以我的拙见):
但是,使用这样一个简单的函数,您最好在全局范围内声明实例:
anna = Person(27, "anna")
print "Age:", anna.age
注:
您的第二个版本因范围而起作用。这是编程语言中的一个基本概念。定义变量/名称标识符时,再次引用它的能力将取决于定义它的范围。函数有自己的作用域,试图从外部引用在其内部创建的名称是行不通的
正如我向您展示的,编程的另一个基本部分是能够使用返回语句,它允许您捕获结果并在最初创建结果的地方之外使用它(在本例中是函数
)
最后一件事
我注意到您打算使用global
关键字声明值
,并使用该关键字在age
类中定义您的self.age
。永远不要那样做;这就是构造函数的作用(\uuuuu init\uuuu
)。正如我在上面的示例中所示,您可以轻松地将参数传递给它(def\uuu init\uuu(self、age、name)
)
最后,我要说的是:global
关键字的使用是有原因的,因为在某些情况下它是有理由的。我个人不使用它,也不经常使用它。这有一个很好的理由,你以后可能会理解,这确实超出了这个问题的范围。请记住,通常不需要在函数中声明变量global
,而且从长远来看,它通常会导致错误代码
如果您习惯于传递参数,那么在开始时(以及将来),您的境况会好得多。这里有几个错误。首先,我应该说你需要复习你的知识(阅读文档,阅读更多教程,等等)。因此,首先,您确实需要返回刚刚创建的对象。因此:
def function (name):
global value
value = 27
name = age() # This is weird. You've passed in `name`, only to re-assign it.
return name # Very important
anna = function("anna")
print "Age:", anna.age
其次,这门课没什么意义。。。它不应该被称为age
,只应该具有age
属性。我建议进行以下调整(以我的拙见):
但是,使用这样一个简单的函数,您最好在全局范围内声明实例:
anna = Person(27, "anna")
print "Age:", anna.age
注:
您的第二个版本因范围而起作用。这是编程语言中的一个基本概念。定义变量/名称标识符时,再次引用它的能力将取决于定义它的范围。函数有自己的作用域,试图从外部引用在其内部创建的名称是行不通的
正如我向您展示的,编程的另一个基本部分是能够使用返回语句,它允许您捕获结果并在最初创建结果的地方之外使用它(在本例中是函数
)
最后一件事
我注意到您打算使用global
关键字声明值
,并使用该关键字在age
类中定义您的self.age
。永远不要那样做;这就是构造函数的作用(\uuuuu init\uuuu
)。正如我在上面的示例中所示,您可以轻松地将参数传递给它(def\uuu init\uuu(self、age、name)
)
最后,我要说的是:global
关键字的使用是有原因的,因为在某些情况下它是有理由的。我个人不使用它,也不经常使用它。这有一个很好的理由,你以后可能会理解,这确实超出了这个问题的范围。请记住,通常不需要在函数中声明变量global
,而且从长远来看,它通常会导致错误代码
如果您习惯于传递参数,那么在开始时(以及将来),您的境况会好得多。这里有几个错误。首先,我应该说你需要复习你的知识(阅读文档,阅读更多教程,等等)。因此,首先,您确实需要返回刚刚创建的对象。因此:
def function (name):
global value
value = 27
name = age() # This is weird. You've passed in `name`, only to re-assign it.
return name # Very important
anna = function("anna")
print "Age:", anna.age
其次,这门课没什么意义。。。它不应该被称为age
,只应该具有age
属性。我建议进行以下调整(以我的拙见):
但是,使用这样一个简单的函数,您最好在全局范围内声明实例:
anna = Person(27, "anna")
print "Age:", anna.age
注:
您的第二个版本因范围而起作用。这是编程语言中的一个基本概念。定义变量/名称标识符时,再次引用它的能力将取决于定义它的范围。函数有自己的作用域,试图从外部引用在其内部创建的名称是行不通的
正如我向您展示的,编程的另一个基本部分是能够使用返回语句,它允许您捕获结果并在最初创建结果的地方之外使用它(在本例中是函数
)
最后一件事
我注意到您打算使用global
关键字