我正在学习类和对象的python基础知识.
我用getter,setter和__str__function 创建了一个基本的类对象.
'''
Created on 02/06/2012
@author: rafael
'''
class Alumno(object):
'''
Esta clase representa a un alumno de la ibero
'''
__nombre=None
__idAlumno=None
__semestre=0
def __init__(self,nombre,idAlumno,semestre):
'''
Constructor
'''
self.__nombre=nombre
self.__idAlumno=idAlumno
self.__semestre=semestre
def Alumno(self):
return self
def getId(self):
return self.__idAlumno
def setId(self,idAlumno):
self.__idAlumno=idAlumno
def getNombre(self):
return self.__nombre
def setNombre(self,nombre):
self.__nombre=nombre
def getSemestre(self):
return self.__semestre
def setSemestre(self,semestre):
self.__semestre=semestre
def __str__(self):
info= "Alumno: "+self.getNombre()+" - id: "+self.getId()+" - Semestre:"+str(self.getSemestre())
return info
Run Code Online (Sandbox Code Playgroud)
还有一个python模块,它导入该类并初始化该对象以打印其信息.
'''
Created on 02/06/2012
@author: rafael
'''
from classes import *
if __name__ == '__main__':
alumno=Alumno("Juanito Perez","1234",2)
print alumno
Run Code Online (Sandbox Code Playgroud)
但我有一个NameError异常,所以我必须以这种方式创建我的对象:
alumno=Alumno.Alumno(param,param,param)
Run Code Online (Sandbox Code Playgroud)
但我希望这样:
alumno=Alumno(param,param,param)
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释课程是如何运作的,或者我做错了什么?
啊,欢迎来到python命名空间冗长的问题.
与Java不同,如果在文件Foo.java中有一个名为Foo的类,则您的类不会自动提升到模块命名空间中.
如果您需要此行为,则需要执行以下操作:
from Alumno import Alumno
Run Code Online (Sandbox Code Playgroud)
还有其他困难的方法.例如,如果您有一个目录:
package/
...
submodule/
YourClass.py
YourClass2.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
你可以from YourClass import YourClass在__init__.py.因此,在子模块之外,您可以做import submodule.YourClass或者from submodule import YourClass获得您想要的行为.