草庐IT

Inheritance

全部标签

python - 静态方法和继承设计

我不清楚用可覆盖的静态方法设计类的最佳方法是什么。我将尝试用一个例子来解释。我们有一个类Goat,它有一个方法can_climb。(顺便说一句,这是Python3,在Python2中我会写classGoat(object):。)classGoat:def__init__(self,*args):...defcan_climb(self,mountain):returnmountain.steepness这按预期工作,但方法can_climb不使用self。让它成为静态方法似乎更干净,pylint甚至对上述方法发出警告。那么让我们改变一下:classGoat:def__init__(se

python - 类属性的继承(python)

有没有办法完成这样的事情?我在Python中工作,但我不确定是否有一种方法可以用任何编程语言来完成...classParent():class_attribute="parent"@staticmethoddefclass_method():print__class__.class_attributeclassChild(Parent):class_attribute="child"我知道我不能直接调用__class__。这只是一个例子,因为我想要类似类本身的引用,因为我希望子类根据其class_attribute采取不同的行为。然后假设输出应该是这样的:>Parent.class_m

初始化派生类和抽象类时出现python错误

我有这个简单的代码,但出现了一个奇怪的错误:fromabcimportABCMeta,abstractmethodclassCVIterator(ABCMeta):def__init__(self):self.n=None#thevalueofnisobtainedinthefitmethodreturnclassKFold_new_version(CVIterator):#newversionofKFolddef__init__(self,k):assertk>0,ValueError('cannothavekbelow1')self.k=kreturncv=KFold_new_ve

Python 继承 : Concatenating with super __str__

我想将子类的__str__实现添加到基础实现中:classA:def__str__(self):return"this"classB(A):def__str__(self):returnsuper(B,self)+"+that"但是,这会产生类型错误:TypeError:unsupportedoperandtype(s)for+:'super'and'str'有没有办法让str(B())返回"this+that"? 最佳答案 你需要做super(B,self).__str__()。super指的是父类;您没有调用任何方法。

python - set 和 frozenset 的继承行为似乎不同

有人可以解释以下行为吗:classderivedset1(frozenset):def__new__(cls,*args):returnfrozenset.__new__(cls,args)classderivedset2(set):def__new__(cls,*args):returnset.__new__(cls,args)a=derivedset1('item1','item2')#WORKSb=derivedset2('item1','item2')#DOESN'TWORKTraceback(mostrecentcalllast):File"inheriting-behavi

python - 为什么要继承对象类型

在我过去的一个问题中,一位回答者建议我,当您要创建的类就像从头开始创建时,最好从对象继承,这不需要从其他类继承。比如像我平时做的那样:classmy_class:"aclassinheritsfromnothing"def__init__(self):pass对于他或她的建议:classsuggested_class(object):"aclassinheritsfromobjecttype"def__init__(self):pass我对这两种方法的优点或缺点感到困惑。问题1:那么你的想法是,继承对象类型还是什么都不继承? 最佳答案

python - 'NoneType' 对象没有属性 'unique' 但我没有使用 'unique' 属性

我在Django1.8中构建模型,我正在使用抽象继承(我假设这是导致问题的原因)。我有抽象模型,然后我有基于这些抽象模型的模型。我在某些模型之间也有ForeignKey和ManyToMany关系。一切看起来都很好,但是当我尝试syncdb或“makemigrationsblog”时,我收到一个AttributeError,它说“NoneType”对象没有属性“unique”。我不知道为什么会这样,我尝试了不同的模型设置,并且阅读了很多论坛帖子,但现在我遇到了瓶颈。我将在下面发布回溯和我的模型:模型:独立数据库fromdjango.dbimportmodelsclassURL(model

python - 如何循环定义三个方法?

我有一个包含三个方法的抽象类,它们在某种意义上是等价的——它们都可以使用一些昂贵的转换函数相互定义。我希望能够编写一个派生类,它只需要覆盖其中一个方法并自动获取另外两个方法。示例classFooBarBaz(object):deffoo(self,x):returnfoo_from_bar(self.bar(x))#ORreturnfoo_from_baz(self.baz(x))defbar(self,x):returnbar_from_foo(self.foo(x))#ORreturnbar_from_baz(self.baz(x))defbaz(self,x):returnbaz

python - python中类变量的继承

试图理解python中的oop我遇到了这种让我困惑的情况,我找不到令人满意的解释......我正在构建一个Countable类,它有一个counter属性,用于计算已初始化该类的实例数。我希望在初始化给定类的子类(或子类)时也增加此计数器。这是我的实现:classCountable(object):counter=0def__new__(cls,*args,**kwargs):cls.increment_counter()count(cls)returnobject.__new__(cls,*args,**kwargs)@classmethoddefincrement_counter(

Python:装饰一个旨在在继承时被覆盖的类方法

假设我有一些基类:classTask:defrun(self):#overridethis!现在,我希望其他人继承Task并覆盖run()方法:classMyTask(Task):defrun(self):#successfuloverride!但是,问题是在每个子类Task的类的run()方法之前和之后都必须发生逻辑。似乎我可以这样做的一种方法是在基类中定义另一个方法,然后调用run()方法。但是,我想问一下,有没有办法用装饰器来实现呢?执行此操作的最pythonic方法是什么? 最佳答案 正如评论中所建议的,让子类覆盖一个钩子(