草庐IT

python - 使用 Django 为抽象基类设置外键

我已将两个类中的公共(public)属性分解为一个抽象基类,但是我有另一个模型需要引用这些类中的任何一个。不能引用ABC,因为它实际上没有数据库表。下面的例子应该能说明我的问题:classAnswer(models.Model):ovramt=models.ForeignKey("Ovramt")question=models.ForeignKey("Question")answer=models.CharField(max_length=3,choices=(("yes","yes"),("no","no")("NA","N/A"))likelihood=models.Integer

python - 在 Python 中将基类动态混合到实例中

是否可以在运行时将基类添加到对象实例(不是类!)?类似于Object#extend在Ruby中的工作方式:classGentleman(object):defintroduce_self(self):return"Hello,mynameis%s"%self.nameclassPerson(object):def__init__(self,name):self.name=namep=Person("John")#howtoimplementthismethod?extend(p,Gentleman)p.introduce_self()#=>"Hello,mynameisJohn"

python - 在 Python 中将基类动态混合到实例中

是否可以在运行时将基类添加到对象实例(不是类!)?类似于Object#extend在Ruby中的工作方式:classGentleman(object):defintroduce_self(self):return"Hello,mynameis%s"%self.nameclassPerson(object):def__init__(self,name):self.name=namep=Person("John")#howtoimplementthismethod?extend(p,Gentleman)p.introduce_self()#=>"Hello,mynameisJohn"

python - 将基类转换为派生类python(或扩展类的更多pythonic方式)

我需要扩展Networkxpython包并向Graph类添加一些方法以满足我的特殊需要我考虑这样做的方法是简单地派生一个新类,例如NewGraph,并添加所需的方法。不过,networkx中还有其他几个函数可以创建和返回Graph对象(例如,生成随机图)。我现在需要将这些Graph对象转换为NewGraph对象,以便我可以使用我的新方法。这样做的最佳方法是什么?还是我应该以完全不同的方式解决问题? 最佳答案 如果您只是添加行为,而不依赖于其他实例值,则可以分配给对象的__class__:frommathimportpiclassCi

python - 将基类转换为派生类python(或扩展类的更多pythonic方式)

我需要扩展Networkxpython包并向Graph类添加一些方法以满足我的特殊需要我考虑这样做的方法是简单地派生一个新类,例如NewGraph,并添加所需的方法。不过,networkx中还有其他几个函数可以创建和返回Graph对象(例如,生成随机图)。我现在需要将这些Graph对象转换为NewGraph对象,以便我可以使用我的新方法。这样做的最佳方法是什么?还是我应该以完全不同的方式解决问题? 最佳答案 如果您只是添加行为,而不依赖于其他实例值,则可以分配给对象的__class__:frommathimportpiclassCi

python - 如果该属性在派生类中被覆盖,如何调用基类的属性?

我正在将我的一些类从广泛使用getter和setter更改为更Pythonic使用属性。但是现在我被卡住了,因为我以前的一些getter或setter会调用基类的相应方法,然后执行其他操作。但是如何通过属性来实现呢?如何调用父类中的属性getter或setter?当然只是调用属性本身会产生无限递归。classFoo(object):@propertydefbar(self):return5@bar.setterdefbar(self,a):printaclassFooBar(Foo):@propertydefbar(self):#returnthesamevalue#asintheba

python - 如果该属性在派生类中被覆盖,如何调用基类的属性?

我正在将我的一些类从广泛使用getter和setter更改为更Pythonic使用属性。但是现在我被卡住了,因为我以前的一些getter或setter会调用基类的相应方法,然后执行其他操作。但是如何通过属性来实现呢?如何调用父类中的属性getter或setter?当然只是调用属性本身会产生无限递归。classFoo(object):@propertydefbar(self):return5@bar.setterdefbar(self,a):printaclassFooBar(Foo):@propertydefbar(self):#returnthesamevalue#asintheba

python - 如何从基类动态创建派生类

例如我有一个基类如下:classBaseClass(object):def__init__(self,classtype):self._type=classtype我从这个类派生了几个其他类,例如classTestClass(BaseClass):def__init__(self):super(TestClass,self).__init__('Test')classSpecialClass(BaseClass):def__init__(self):super(TestClass,self).__init__('Special')有没有一种很好的Pythonic方法可以通过将新类放入我

python - 如何从基类动态创建派生类

例如我有一个基类如下:classBaseClass(object):def__init__(self,classtype):self._type=classtype我从这个类派生了几个其他类,例如classTestClass(BaseClass):def__init__(self):super(TestClass,self).__init__('Test')classSpecialClass(BaseClass):def__init__(self):super(TestClass,self).__init__('Special')有没有一种很好的Pythonic方法可以通过将新类放入我

python - 在 Python 中调用基类的类方法

考虑以下代码:classBase(object):@classmethoddefdo(cls,a):printcls,aclassDerived(Base):@classmethoddefdo(cls,a):print'Inderived!'#Base.do(cls,a)--can'tpass`cls`Base.do(a)if__name__=='__main__':d=Derived()d.do('hello')>$pythonplay.py>Inderived!>msg从Derived.do,如何调用Base.do?如果这是一个普通的对象方法,我通常会直接使用super甚至基类名称