Python 之 __name__属性详解~~.......(不看后悔系列...)

目录

实例演示:

运行结果分析:


"__name__"是 Python 中的一个特殊属性,它表示当前文件或模块的名称。

当一个 Python 脚本作为主文件或者主模块被直接运行时,"__name__" 的值就是 "__main__"。

而当该脚本被其他模块导入时,即"__name__"位于次文件(被导入的文件)中,则执行"__name__"时返回的值就是导入的文件名。

这个属性有以下常见用途:

1. 用于判断当前模块是否作为主模块运行,从而执行不同的逻辑。

2. 在被导入的模块中,根据 "__name__" 的值来控制某些代码是否执行,例如只在模块自身运行时执行一些测试或示例代码。

下面是一个简单的示例代码:

if __name__ == '__main__':

    print("This code is running as the main module.")

else:

    print("This code is being imported by another module.") 

在这个示例中,根据 "__name__"的值来决定执行不同的打印语句。

实例演示:


子文件first.py:

def hua():
    print("第一个函数成功调用")
def shu():
    print("第二个函数成功调用")
def cao():
    print("第三个函数成功调用")
def fun(n):
    print("first.py的name属性返回值:",__name__)
    return n
if __name__=="__main__":#如果__name__属性返回值是主文件名为True,则调用fun(n)函数,n=8,并打印出来-->利用if来判断当前文件是否为主文件
    print(fun(8))

主文件second.py

import first#导入子文件模块
def fun2(n):
    return n*n
first.hua()#调用子模块的函数
first.shu()
first.cao()
print("second.py的name属性返回值:",__name__)#打印当前文件的__name__属性
if __name__=="__main__":#用if判断当前文件是否为主文件
    print(fun2(6))

主文件second.py的运行结果:

运行结果分析:

第1行代码导入子文件first.py,则开始执行子文件,由于first.py前9行代码都是定义函数,代码从第10行开始执行,而当前文件不属于主文件,if语句不满足条件返回False,程序不会执行if包含的代码块。

第2、3行代码为定义函数,不执行。

第4、5、6行代码是主文件调用子文件里的函数,依次跳到对应的位置执行。

第7行代码,直接打印当前文件的__name__属性,直观体现second.py文件是不是主文件,即看它的执行结果是不是“__main__”。

第8、9行代码用if语句判断当前文件是不是主文件,True的话执行下面的代码块,即调用fun2()函数,并传入参数6,返回函数值;False的话直接结束。

实际的运行结果也能证明:first.py作为子文件被主文件second.py导入使用。

~希望这个介绍对你有帮助! ~~  请注意消化吸收!!!

如果你还有其他关于 "__name__"属性的问题,请随时评论区提问......

xue

### 回答1: 这是一个Python代码片段,它返回当前对象所属类的名称。可以在类的方法中使用该代码片段来获取对象所属的类的名称。 代码片段的含义是:self是一个指向当前对象的引用,__class__是一个特殊的内置属性,表示该对象所属的类,而__name__是类的名称属性。因此,self.__class__.__name__返回当前对象所属类的名称。 ### 回答2: self.__class__.__name__是Python中一个用于获取对象类名的魔法方法。 首先,我们需要理解什么是魔法方法。在Python中,魔法方法是以双下划线开头和结尾的特殊方法,它们用于在类定义中实现一些特殊的行为。例如,__init__方法是用于初始化对象的构造函数,__str__方法用于定义对象的字符串表示形式等等。 当我们使用self.__class__.__name__时,它返回的是当前对象所属的类的名称。这个方法非常有用,特别是在面向对象的编程中,当我们需要知道一个对象所属的类时,就可以使用它。 例如,假设我们定义了一个名为Person的类,这个类包含了一个方法get_name用于获取人的名字。我们创建一个Person对象并调用get_name方法,代码如下: class Person: def __init__(self, name): self.name = name def get_name(self): return self.name p = Person('John') print(p.__class__.__name__) # 输出Person 在以上代码中,当我们调用p.__class__.__name__时,它返回的是Person,也就是当前对象p所属的类的名称。 除了self.__class__.__name__之外,Python中还有一些其他的内置函数和魔法方法也能够获取一个对象所属的类,例如type()函数、isinstance()函数、__name__属性等等。不同的方法在不同的场景下都有其优缺点,需要根据具体情况进行选择使用。 ### 回答3: self.__class__.__name__是在Python中常用的语法,用于获取一个实例化对象所属的类的类名。其中self代表的是对象本身,__class__是类对象,.__name__则表示返回该类对象的名称,即类名。 在Python中,通过self.__class__.__name__可以方便的获取一个对象所属的类名,这个方法在面向对象编程中非常实用。在一些需要根据类名动态创建对象的场景中,我们可以使用该语法来实现更加灵活的代码。 例如,在Python中,我们可以利用getattr()函数来动态创建对象。其中getattr()函数的第一个参数是类对象,第二个参数是方法名或属性名。利用self.__class__.__name__可以很方便地获取类名,并用该类名作为参数调用getattr()函数创建新对象。 下面是一个示例代码: ```python class MyClass: def __init__(self): pass def get_class_name(self): return self.__class__.__name__ # 创建一个对象 obj = MyClass() # 打印对象的类名 print(obj.__class__.__name__) # 输出:MyClass # 利用getattr()函数动态创建对象 class_name = obj.get_class_name() new_obj = getattr(sys.modules[__name__], class_name)() # 打印新对象的类名 print(new_obj.__class__.__name__) # 输出:MyClass ``` 通过以上的示例,我们可以发现,在实际应用中,self.__class__.__name__可以轻松地实现动态创建对象等操作。因此,在Python编程中,深入理解和掌握该语法将会非常有益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值