代码显示什么内容
1.class A:
def __init__(self):
pass
def get(self):
print(__name__)
>>> a = A()
>>> a.get()
2.
class A:
def __init__(self, a, b, c):
self.x = a + b + c
a = A(1,2,3)
b = getattr(a, 'x')
setattr(a, 'x', b+1)
print a.x
以上代码分别会显示什么内容为什么?看不懂 (1)
Help on module __main__:
NAME
__main__
DATA
__annotations__ = {}
FILE
(built-in)
(2)
__init__是构造函数, a=A(1,2,3)表示a.x=6了 之后的b=getattr(a,'x'),b=6setattr(a,'x',b+1) 使得a.x=6+1=7 本帖最后由 Twilight6 于 2020-7-1 13:15 编辑
第一个代码:打印显示的是 __main__
__name__ 是类中的属性,当在脚本中直接运行,返回的是__main__ 而当被当作模块导入时候返回的是 模块自己的名字
这个代码的意思是当模块被直接运行时, if __name__ == '__main__'下代码块将被运行,当模块是被导入时, if __name__ == '__main__'下面的代码块不被运行。
第二个代码: 打印显示的是 7 (你这里的 print 忘记带括号了,除非你是2.x版本的Python)
getattr函数用来获取对象中的属性,第一个参数是被获取的对象,第二个参数就是获取的属性名
class A:
def __init__(self, a, b, c):
self.x = a + b + c
a = A(1,2,3)
b = getattr(a, 'x')
则 getattr(a, 'x') 这里 a 对象中的 x 属性 是等于 6 的 所以 b = 6
setattr(a, 'x', b+1)
setattr() 函数 第一个参数也是填入对象,第二个是需要设置的属性名,第三个就是设置的属性值了
那么这里就是将 a 实例对象中的 x 重新赋值为b + 1,而 因为之前的b = 6 所以这里重新赋值 x 的值 所以打印结果为 7
Twilight6 发表于 2020-7-1 12:00
第一个代码:打印显示的是 __main__
__name__ 是类中的属性,当在脚本中直接运行,返回的是__ma ...
而当被当作模块导入时候返回的是 模块自己的名字,这个将可以用来你不想导入模块时候的方法到 if __name__ == '__main__' 中去,就不会被导入
这句话没有理解可以举个例子吗? 波大大12138 发表于 2020-7-1 13:08
而当被当作模块导入时候返回的是 模块自己的名字,这个将可以用来你不想导入模块时候的方法到 if __name_ ...
我上面的描述有误,抱歉,不是不被导入是 :
当模块被直接运行时, if __name__ == '__main__'下代码块将被运行,当模块是被导入时,代码块不被运行。
#a.py
def fun():
pass
def t():
pass
fun()
if __name__ == '__main__' :
t()
# b.py
import a
b.py 运行结果:
func # 发现并没用打印 t
页:
[1]