python为什么closed_为什么python类的函数被调用两次[关闭](Why a function of python class is called twice [closed])...

为什么python类的函数被调用两次[关闭](Why a function of python class is called twice [closed])

我遇到了两次调用的python类函数的问题。 我正在使用Spyder IDE。

这是我的简单代码

class Test:

def f(self):

print("a")

from Test import *

t = Test()

t.f()

当我按“运行文件”按钮...结果是

a

a

但当我尝试突出显示所有内容并按“运行单元格”时...结果是

a

我想知道当我按“运行文件”时会发生什么,以及如何解决这个问题。

非常感谢

I am having a problem with the function of python class that is called twice. I am using Spyder IDE.

Here is my simple code

class Test:

def f(self):

print("a")

from Test import *

t = Test()

t.f()

When I press "Run File" button...the result is

a

a

But when I try to highlight everything and press "Run Cell"...the result is

a

I would like to know what happen when I press "Run File" and how to solve this issue.

Many thanks

原文:https://stackoverflow.com/questions/42620635

2020-02-19 17:30

满意答案

因为你应该导入模块 ,而不是类。 因此,当您from Test import *执行操作时from Test import *您正在运行所有代码,其中包括实例化和调用f方法。 导入后,你实例化并再次调用它,这就是它被打印两次的原因,因为它正在运行两次。

Because you should import modules, not classes. So when you are doing from Test import * you are running all your code, which includes the instantiation and call to the f method. And after importing you are instantiating and calling it again, so that's the reason it is being printed twice, because it is being run twice.

2017-03-06

相关问答

这可能不直接回答你的问题,但一定会有帮助。 如果使用具有选项--sort累积的分析器,它将按累积时间对功能进行排序。 这有助于检测不仅重要的功能,而且检测它们的功能。 python -m cProfile --sort cumulative myScript.py

有一个解决方法来获取调用者的功能: import inspect

print inspect.getframeinfo(inspect.currentframe().f_back)[2]

您可以添加任意数量的f_back,以防您想要...

您的代码段中未调用此函数两次。 我假设我们还没有看到更多的代码,它们调用myFunction ; 然后,调用该函数两次的目的是显示排序函数的效果。 假设在显示函数之后调用myFunction ,程序将执行以下操作: 以他们开始的(未分类)顺序显示汽车 运行myFunction对汽车进行排序,然后再次显示它们 这将允许用户在排序之前和之后查看汽车列表之间的差异。 The function is not called twice in your snippet. I'm assuming there'...

class information:

def __init__(self, name, age, gender, enlistmentNum):

self.name = name

self.age = age

self.gender = gender

self.enlistmentNum = enlistmentNum

self.playerinf()

在init函数结束时调用playerinf。 在实例化...

对于你的例子, a = b.method(c); ,除了复制省略外,可能会有三份副本。 第一种是将c对象复制到函数参数x 。 第二个是从函数返回x对象的时候。 第三种是将返回值复制到对象中。 前两个涉及复制构造函数,最后一个涉及复制赋值运算符,除非您将其更改为Student a = b.method(c); ,在这种情况下,他们都使用复制构造函数。 a , b和c都将在其范围的末尾被销毁。 对象x将在method函数的末尾被销毁。 函数的返回值将在包含它的完整表达式的末尾被销毁 - 也就是说,一旦...

在我看来,如果您在测试时编写函数以不同的方式运行,那么您并没有真正测试它。 为了测试函数,我会mock.patch()数据库对象,然后检查它在函数中是否正确使用。 开始使用模拟库时最困难的事情是找到要替换的正确对象 。 在您的示例中,如果在your_module从Database_IO模块导入Database_read对象,则可以使用类似于以下内容的代码对其进行测试 with mock.patch('your_module.Database_read') as dbread_mock:

#...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值