我有一个孩子类,两个父母的函数名称相同。
我需要根据构造函数(__init__
)决定(基于要创建的对象的类型)哪个子类的对象需要调用哪个父类的函数。有没有一种方法可以将默认函数调用动态链接/切换到父对象之一。下面给出了示例代码。我不想使用对象容器,因为它很难维护和重构。
class Square:
def perform(self, num):
print(num * num)
class Cube:
def perform(self, num):
print(num * num * num)
class Exponent(Square, Cube):
def __init__(self, type):
if type == 'square':
# inherit default functions from square <--- ??
else:
# inherit default functions from cube <--- ??
square = Square() # <-- i don't want to do this
cube = Cube() # <-- i don't want to do this
Exponent('cube').perform(2) # --> should print '8'
Exponent('square').perform(2) # --> should print '4'
Exponent('cube').cube.perform(2) # <-- i don't want to do this
Exponent('square').square.perform(2) # <-- i don't want to do this
下面给出一种方法,但是涉及到复制所有父类函数,这太过分了:
class a:
def x (self):
print('a')
class b:
def x (self):
print('b')
class c(a,b):
def __init__(self, type_):
if type_ == 'a':
self.ref = a
else:
self.ref = b
def x(self):
self.ref.x(self)
c('a').x()
c('b').x()
Python提供了很多灵活性,但是您正在与该语言提供的类机制进行对抗。无法“不费吹灰之力”地执行此操作,因为您将在该语言提供的功能之上实现自己的机制。老实说,只需忘记使用多重继承,因为
继承不是您要描述的 ,您需要一个代理对象来委派给适当的对象。根据您的特定情况,这看起来可能会有所不同,但这可以帮助您:
In [1]: class A:
...: def x (self):
...: print('a')
...:
...: class B:
...: def x (self):
...: print('b')
...:
...: class C:
...: def __init__(self, type_, *args, **kwargs):
...: self.__wrapped = type_(*args, **kwargs)
...: def __getattr__(self, attr):
...: return getattr(self.__wrapped, attr)
...:
...:
In [2]: C(A).x()
a
In [3]: C(B).x()
b
注意,方法C.__init__
是实现的,第一个参数之后的所有内容都传递给委托类型的构造函数。
我有以下JPA实体结构。 我想写一个JPA查询,它将返回给定parent_id的PARENT_NAME和所有子级的计数。 t我能想到的唯一解决办法是加入并编写一个复杂的条件查询。 我想不出使用简单的JPA查询获得结果的方法。 有更简单的方法吗?
我想知道如果为某个参数创建一个带有空setter方法的父类,然后创建几个扩展该类的类,但不是所有的类都有该参数,会发生什么。在参数存在的类中调用set方法时,它会设置param。在参数不存在的类中,不会发生任何事情,例如: 因此,如果我们创建类A,将其上转换为Pak,并尝试,属性将被设置。 如果我们对类B也这样做,尝试什么都不会发生。 有人能解释一下“引擎盖下”发生了什么吗?我希望得到一个例外,因
问题内容: 你好 我想获得在运行时在Java中实现接口的类的列表,这样我就可以进行查找服务而不必对其进行硬编码。有没有简单的方法可以做到这一点?我不害怕 问题答案: 最简洁的答案是不。 长的答案是,子类可以以多种方式出现,从根本上说,根本不可能分类找到它们。 您无法在运行时执行此操作,但只有在加载了类以及如何知道它们已加载后才能找到类?您可以扫描每个JAR和类文件,但这不是确定的。另外,还有URL
问题内容: 如何选择锚元素的直接父元素? 例如,我的CSS将是这样的: 显然,可以使用JavaScript进行此操作,但是我希望CSS Level 2本身具有某种解决方法。 我正在尝试设置样式的菜单已由CMS弹出,因此我无法将活动元素移动到元素…(除非我将菜单创建模块作为主题,但我不希望这样做)。 有任何想法吗? 问题答案: 当前无法在CSS中选择元素的父级。 如果有办法,可以在当前的CSS选择器
本文向大家介绍python中子类继承父类的__init__方法实例,包括了python中子类继承父类的__init__方法实例的使用技巧和注意事项,需要的朋友参考一下 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。 注意:这个名称的开始和结尾都是