草庐IT

New-PSSession

全部标签

Python __enter__/__exit__ vs __init__(或 __new__)/__del__

我已经搜索过,但找不到任何充分的理由使用python的__enter__/__exit__而不是__init__(或__new__?)/__del__.我了解__enter__/__exit__旨在与with语句一起用作上下文管理器,而withcode>语句很棒。但与之对应的是,这些block中的任何代码仅在该上下文中执行。通过使用这些而不是__init__/__del__我似乎正在与调用者创建一个隐式契约(Contract),他们必须使用with,但没有办法执行这样的契约(Contract),并且契约(Contract)仅通过文档(或阅读代码)进行沟通。这似乎是个坏主意。我似乎在wi

Python 模拟补丁参数 `new` 与 `new_callable`

来自文档http://www.voidspace.org.uk/python/mock/patch.htmlpatch(target,new=DEFAULT,spec=None,create=False,spec_set=None,autospec=None,new_callable=None,**kwargs)Ifnewisomitted,thenthetargetisreplacedwithaMagicMock.Ifpatchisusedasadecoratorandnewisomitted,thecreatedmockispassedinasanextraargumenttoth

python - 类型错误 : object() takes no parameters after defining __new__

我真的不明白这段代码的错误在哪里:classPersonne:def__init__(self,nom,prenom):print("Appeldelaméthode__init__")self.nom=nomself.prenom=prenomdef__new__(cls,nom,prenom):print("Appeldelaméthode__new__delaclasse{}".format(cls))returnobject.__new__(cls,nom,prenom)personne=Personne("Doe","John")它给了我错误:Traceback(mostre

python - Pandas:同时分配多个 *new* 列

我有一个DataFramedf,其中有一列包含每一行的标签(除了每一行的一些相关数据)。我有一个字典labeldict,其键等于可能的标签,值等于与该标签相关的2元组信息。我想在我的框架上添加两个新列,一个用于对应于每行标签的2元组的每个部分。设置如下:importpandasaspdimportnumpyasnpnp.random.seed(1)n=10labels=list('abcdef')colors=['red','green','blue']sizes=['small','medium','large']labeldict={c:(np.random.choice(colo

python - super 和 __new__ 混淆

正如我刚刚学到的,我可以这样使用super():super(class,obj_of_class-or-_subclass_of_class)代码如下:#Case1classA(object):def__init__(self):print"Ainit"classB(A):def__init__(self):print"Binit"super(B,self).__init__()#ok,IcaninvokeA's__init__successfully#Case2classA(object):@classmethoddeffoo(cls):print"Afoo"classB(objec

Python:总是使用 __new__ 而不是 __init__?

我了解__init__和__new__的工作原理。我想知道是否有任何__init__可以做到而__new__不能做到的事情?即可以使用__init__替换为以下模式:classMySubclass(object):def__new__(cls,*args,**kwargs):self=super(MySubclass,cls).__new__(cls,*args,**kwargs)//Do__init__stuffherereturnself我之所以这么问,是因为我想让PythonOO的这一方面更适合我。 最佳答案 所以,一个类的类

python - `__init__` 能做什么而 `__new__` 不能?

在Python中,__new__用于初始化不可变类型,__init__通常用于初始化可变类型。如果__init__从语言中删除,什么不能再做(容易)?例如,classA:def__init__(self,*,x,**kwargs):super().__init__(**kwargs)self.x=xclassB(A):def__init__(self,y=2,**kwargs):super().__init__(**kwargs)self.y=y可以像这样使用__new__重写:classA_N:def__new__(cls,*,x,**kwargs):obj=super().__ne

python - "MetaClass"、 "__new__"、 "cls"和 "super"- 究竟是什么机制?

我读过这样的帖子:WhatisametaclassinPython?Whatareyour(concrete)use-casesformetaclassesinPython?Python'sSuperisnifty,butyoucan'tuseit但不知何故,我感到困惑。许多困惑,例如:我何时以及为什么必须执行以下操作?#Referlink1returnsuper(MyType,cls).__new__(cls,name,bases,newattrs)或#Referlink2returnsuper(MetaSingleton,cls).__call__(*args,**kw)或#Ref

python - Python 中的 __new__ 和 __init__

我正在学习Python,到目前为止,我可以讲述以下关于__new__和__init__的内容:__new__用于对象创建__init__用于对象初始化__new__在__init__之前调用,因为__new__返回一个新实例,然后调用__init__以初始化内部状态.__new__适用于不可变对象(immutable对象),因为它们一旦被分配就无法更改。所以我们可以返回具有新状态的新实例。我们可以对可变对象使用__new__和__init__,因为它的内部状态是可以改变的。但我现在还有其他问题。当我创建一个新实例如a=MyClass("hello","world")时,这些参数是如何传

python - pip 抛出 TypeError : parse() got an unexpected keyword argument 'transport_encoding' when trying to install new packages

我正在使用最新版本的Anaconda3。我刚刚安装了它,我正在尝试下载一些软件包。我正在使用Anaconda提示。在尝试使用pip做任何事情(包括升级现有软件包)时,我得到以下回溯。Exception:Traceback(mostrecentcalllast):File"C:\Users\csprock\Anaconda3\lib\site-packages\pip\basecommand.py",line215,inmainstatus=self.run(options,args)File"C:\Users\csprock\Anaconda3\lib\site-packages\pi