2013-02-02 47 views
2
class RoundFloat(float): 
    def __new__(cls,val): 
    x=float.__new__(cls,round(val,2)) 
    print x, type(x) 

>>>RoundFloat(1.785) 
1.78 <class '__main__.RoundFloat'> 

main这里是什么意思?
if __name__="__main__"的含义相同?__main__这里是什么意思?

回答

3

RoundFloat__main__(正在运行的文件)的属性,因此为'__main__.RoundFloat'。如果班级来自导入的模块,则__main__将被模块名称替换。

if __name__ == '__main__'的目的是检查模块是否是顶层脚本,并且如果它是,则执行的代码块。如果正在导入,那么该代码块将不会执行,因为__name__应该是模块的名称。

1

__main__是顶级脚本环境—它是执行脚本的内置模块。

reference

1

也就是说,你运行顶层脚本的名称。它不是作为模块导入的。如果您的代码作为模块导入,则该部分将被模块名称替换。属性__name__是模块名称。顶层脚本的名称为__main__

1

你在主序运行RoundFloat,因为它不属于任何其他类。

如果您将RoundFloat类放在另一个类中,您可能会得到SomeOtherClass.RoundFloatmain.SomeOtherClass.RoundFloat。 (我不确定“主序列”是否是正确的Python术语,但希望你能明白我的意思。)