Maison > Questions et réponses > le corps du texte
Obtenez d'abord le code
import sys
class TestWriter(object):
def __init__(self, stream=sys.stdout):
super(TestWriter, self).__init__()
self.stream = stream
def write(self, line):
self.stream.write(line)
tmp = sys.stdout
f = open('d:\stdout.txt', 'w')
try:
sys.stdout = f
adpt = TestWriter() //如果这里我把f当参数传入,则执行结果如预期。
adpt.write('asdfwe') // 预期字符串写入文本,单事实上字符串输出到了屏幕。
print 'this is import from print' //如预期的输入到了文本
except Exception, e:
sys.stdout = tmp
print e
finally:
sys.stdout = tmp
f.close()
print 'finish'
Problème : comme je l'ai écrit dans les commentaires, la sortie redirigée de sys.stdout n'est pas implémentée lors de l'appel de TestWriter.write(), mais l'impression suivante prouve que la sortie standard a été redirigée vers l'objet fichier f.
Lors du suivi des points d'arrêt, self.stream est également affiché en tant qu'objet f
Résolu ! ! !
巴扎黑2017-05-18 10:50:16
def __init__(self, stream=sys.stdout)
Lorsque Python crée chaque fonction, chaque paramètre sera lié et la valeur par défaut ne sera pas rechargée lorsque la valeur change
# coding: utf-8
D = 2
class Test:
def __init__(self, a=D):
print a
if __name__ == '__main__':
D = 3
t = Test()
print D
inner function: 2
outer function: 3
Mais si le paramètre par défaut du paramètre de liaison est lié à l'adresse, c'est différent. L'adresse reste inchangée, mais le contenu peut changer.
# coding: utf-8
D = [3]
class Test:
def __init__(self, a=D):
print "inner function: ", a
if __name__ == '__main__':
D[0] = 2
t = Test()
print "outer function:", D
inner function: [2]
outer function: [2]
阿神2017-05-18 10:50:16
En revanche, en Python, l'exécution commence en haut d'un fichier et se déroule dans un ordre bien défini à travers chaque instruction du fichier, ...
http://stackoverflow.com/ques...
python interprète chaque instruction séquentiellement, donc TestWriter
的构造器参数stdout
n'est pas redirigé.
Ce qui précède ne sont que mes suppositions
================================================= === ====================
import sys
class A:
def __init__(self, stream=sys.stdout):
print(stream)
f = open('test.txt', 'w')
a = A()
sys.stdout = f
print(sys.stdout)
Résultats d'exécution