草庐IT

python - 直接在包的命名空间中公开 Python 包内模块内的类

我有一个wxPython应用程序,在一个名为gui的包中,各种GUI类在它们自己的模块中.使用此设置,导入主窗口将按如下方式完成:fromgui.mainwindowimportMainWindow这对我来说看起来很乱,所以我更改了__init__.pygui的文件package将类直接导入包命名空间:frommainwindowimportMainWindow这允许我像这样导入主窗口:fromguiimportMainWindow这在我看来在美学上更好,我认为它也更接近地代表了我正在做的事情(从MainWindow“namespace”导入gui类)。我制作gui的原因package

python - 模拟补丁不适用于 __init__.py 中的类

我正在尝试使用patch从一个方法中返回一个Mock。基本结构如下:MyCode.pyclassMyClass:def__init__(self,first_name,last_name):self.first=first_nameself.last=last_namedefget_greeting(self):return'Hello{f}{l}'.format(f=self.first,l=self.last)defget_new_greeting(first_name,last_name):obj=MyClass(first_name,last_name)returnobj.ge

python - 如何将参数从 Python 3.x 中的类定义传递给元类?

这是Howtopassargumentstothemetaclassfromtheclassdefinition?的Python3.x版本问题,根据要求单独列出,因为答案与Python2.x有很大不同。在Python3.x中,如何将参数传递给元类的__prepare__,__new__,和__init__功能,以便类作者可以向元类提供有关应如何创建类的输入?作为我的用例,我使用元类来启用类及其子类的自动注册到PyYAML中以加载/保存YAML文件。这涉及PyYAML库存中不可用的一些额外的运行时逻辑YAMLObjectMetaClass.此外,我想允许类作者有选择地指定PyYAML用来

使用两个不同文件的类中的 Python 模拟内置 'open'

当两个文件都使用上下文管理器时,我无法弄清楚如何模拟类中打开的两个文件。我知道如何使用像这样的模拟模块为一个上下文管理的文件执行此操作:@patch('__builtin__.open')deftest_interface_mapping(self,mock_config):m=MagicMock(spec=file)handle=m.return_value.__enter__.return_valuehandle.__iter__.return_value=('aa','bb')我的问题是当一个类在同一调用中打开两个不同的文件时如何执行此操作。在我的例子中,类__init__()将

python - 在python中的类之间记录

我在python中有三个类,它们在不同的线程中运行。我想将所有类的输出输出到同一个文件。现在我在主类中创建了输出方法,并通过构造函数将其传递给其他类。有没有办法更好地处理它?除了使用构造器之外,我如何在类之间传递记录器?也许python在Java中支持类似静态方法的东西,所以我可以在所有三个类中编写类似Logger.info(message)的东西?另一种方法可能是将全局sys.stdout重定向到文件,即指定logger=open('debug.txt','w')sys.stdout=logger然后在所有类中调用sys.stdout。你怎么看? 最佳答案

python - 如何使父类(super class)独有的类属性

我有一个星球的大师类:classPlanet:def__init__(self,name):self.name=name(...)defdestroy(self):(...)我还有一些继承自Planet的类。我想让其中一个无法被销毁(不要继承destroy功能)例子:classUndestroyable(Planet):def__init__(self,name):super().__init__(name)(...)#Nowitshouldn'thavethedestroy(self)function所以当这个运行时,Undestroyable('ThisPlanet').destr

python - 如何在 Python 中获取包含日志记录调用的类的名称?

如果我想要函数名称,我可以简单地将%(funcName)s包含在Formatter中。但是我如何获取包含日志记录调用的类的名称呢?我已经浏览了有关logging的文档,但找不到任何提及它的地方。 最佳答案 要使用一种相当简单的pythonic方法来获取类名以使用记录器输出,只需使用日志记录类即可。importlogging#CreateabaseclassclassLoggingHandler:def__init__(self,*args,**kwargs):self.log=logging.getLogger(self.__cla

python - 为什么我在使用 super() 时必须指定我自己的类,有没有办法绕过它?

使用Python的super()做方法链时,必须显式指定自己的类,例如:classMyDecorator(Decorator):defdecorate(self):super(MyDecorator,self).decorate()我必须指定我的类MyDecorator的名称作为super()的参数。这不是干的。当我现在重命名我的类(class)时,我将不得不重命名它两次。为什么要这样实现?有没有办法避免两次(或多次)写类名? 最佳答案 在Python3.0中,您可以使用super(),它等同于super(ThisClass,sel

python - 在 ipython 中编辑先前定义的类的好方法

如果我想在ipython中重新定义先前定义的类的成员,我想知道一个好的方法。说:我已经定义了一个如下所示的类介绍,稍后我想重新定义部分函数定义_print_api。任何无需重新输入即可做到这一点的方法。classintro(object):def_print_api(self,obj):def_print(key):ifkey.startswith('_'):return''value=getattr(obj,key)ifnothasattr(value,im_func):doc=type(valuee).__name__else:ifvalue.__doc__isNone:doc='

python - 使用 bool(TheClassItself) 返回 False 的类

我想创建一个类MyClass,其中bool(MyClass)返回False。可能吗?我希望类本身具有这种行为,而不是该类的对象。对于该类的对象,我知道我可以在__bool__(self)中返回False。 最佳答案 要定义一个类使用的__bool__方法,而不是它的实例,您需要修改它的类。您可以通过编写metaclass来做到这一点.classFalseMeta(type):def__bool__(self):returnFalseclassMyClass(metaclass=FalseMeta):passprint(bool(My