草庐IT

python - 如何在不显式导入的情况下使新装饰器在类中可用?

是否可以修改一个类,使某个方法装饰器可用,而不必显式导入它,也不必为其添加前缀(@something.some_decorator):classSomeClass:@some_decoratordefsome_method(self):pass我认为类装饰器不可能做到这一点,因为应用得太晚了。看起来更有希望的选项是使用元类,但我不确定如何,我的猜测是我必须将some_decorator引入到SomeClass的命名空间中。感谢@MartijnPieters指出staticmethod和classmethod是内置的。我原以为它们会成为type机器的一部分。明确地说,我没有任何明确的用例

python - 在类的每个方法中捕获相同的异常

我是一名初学者,正在开发一个简单的基于卡片的GUI。用Python编写。有一个基类,其中包括所有卡片的词汇表,如_cards={'card1_ID':card1,'card2_ID':card2}。GUI上的卡片由其唯一ID引用。因为我计划让代码对其他初学者可用,所以我想在他们提供不存在的卡ID时明确通知他们(而不是抛出KeyError)。现在我有一大堆重复的try-expect子句让我怀疑:部分代码,没有try-catching的单行方法:defshift(self,card_ID,amount):"""Movesthecardbythegivenamountofpixels.:pa

Python:为什么我不能在类里面使用 `super`?

为什么我不能使用super获取类的父类(superclass)的方法?例子:Python3.1.3>>>classA(object):...defmy_method(self):pass>>>classB(A):...defmy_method(self):pass>>>super(B).my_methodTraceback(mostrecentcalllast):File"",line1,insuper(B).my_methodAttributeError:'super'objecthasnoattribute'my_method'(当然这是一个微不足道的案例,我可以做A.my_met

python 使用 __init__ 与仅在类中定义变量-有什么区别吗?

我是Python的新手-只是想更好地理解某些事情背后的逻辑。为什么要这样写(默认变量在__init__):classDawg:def__init__(self):self.previousWord=""self.root=DawgNode()self.uncheckedNodes=[]self.minimizedNodes={}definsert(self,word):#...deffinish(self):#...取而代之的是:classDawg:previousWord=""root=DawgNode()uncheckedNodes=[]minimizedNodes={}defin

python - 在类对象中,如何自动更新属性?

我有一个具有多个相关属性的类,例如:classSomeClass:def__init__(self,n=0):self.list=range(n)self.listsquare=[x**2forxinself.list]如果我正常制作一个对象,那没问题,用a=SomeClass(10)我会得到2个列表,a.list和a.listsquare。现在如果我想先创建一个空对象,并为其分配一个属性,我希望其他属性自动更新,例如如果我这样做b=SomeClass()b.list=range(5,10)我希望b.listsquare自动更新,反之亦然(分配b.listsquare并自动更新b.li

python - "__module__"是否保证在类创建期间定义?

我正在阅读一些基本上看起来像这样的代码:classFoo(object):class_name=__module__.replace('_','-')对我来说,那看起来真的很奇怪(__module__,那是什么?)所以我去看了pythondata-model.快速搜索显示__module__是类对象和函数对象的属性。但是,在全局命名空间中没有可用的__module__(只需尝试查看它并观察导致的NameError即可轻松验证...)。我决定将此归因于特定于实现的行为,但作为最后的检查,我决定使用手边的其他实现进行测试。原来这段代码是用1执行的Cpython2.7.6Cpython3.4

python - 有没有办法在类定义之后设置元类?

为了设置类的元类,我们使用__metaclass__属性。元类在定义类时使用,因此在类定义后显式设置它无效。这是当我尝试显式设置元类时发生的情况;>>>classMetaClass(type):def__new__(cls,name,bases,dct):dct["test_var"]=Truereturntype.__new__(cls,name,bases,dct)def__init__(cls,name,bases,dct):super(MetaClass,cls).__init__(name,bases,dct)>>>classA:__metaclass__=MetaClass

python - 在类对象中存储未绑定(bind)的 python 函数

我正在尝试在python中执行以下操作:在名为foo.py的文件中:#simplefunctionthatdoessomething:defmyFunction(a,b,c):print"calltomyFunction:",a,b,c#classusedtostoresomedata:classdata:fn=None#assignfunctiontotheclassforstorage.data.fn=myFunction然后在一个名为bar.py的文件中:导入food=foo.datad.fn(1,2,3)但是,我收到以下错误:TypeError:unboundmethodf()

python - 在类对象中存储未绑定(bind)的 python 函数

我正在尝试在python中执行以下操作:在名为foo.py的文件中:#simplefunctionthatdoessomething:defmyFunction(a,b,c):print"calltomyFunction:",a,b,c#classusedtostoresomedata:classdata:fn=None#assignfunctiontotheclassforstorage.data.fn=myFunction然后在一个名为bar.py的文件中:导入food=foo.datad.fn(1,2,3)但是,我收到以下错误:TypeError:unboundmethodf()

ios - 为什么 Apple 在类构造函数中对 instancetype 的使用不一致?

查看NSArray.h中的NSArray创建方法block。返回id的方法不返回instancetype是否有正当理由?Apple甚至努力添加内联注释,让我们知道id在这种情况下返回一个NSArray。@interfaceNSArray(NSArrayCreation)+(instancetype)array;+(instancetype)arrayWithObject:(id)anObject;+(instancetype)arrayWithObjects:(constid[])objectscount:(NSUInteger)cnt;+(instancetype)arrayWith