如何使用子类的数据调用超类方法?

用户12733685

我正在解析 XML 文件中的数据,我需要将其中的一些转换为整数 - 将它们设置为 B 类的属性时。由于我有多个子类,因此我尝试在超类中编写一次代码,而不必在每个子类中编写代码。

class A:

  def __setattr__(self, name, value):
    if isinstance(__class__.__dict__[name], int):
      self.__dict__[name] = int(value)

class B(A):

  val = int()

  def __init__(self, val):
    self.val = val


b = B("4")
print(type(b.val))

我的问题是,__class__self引用超类。我需要子类中的那些。有任何想法吗?


我不确定我是否很好地解释了我的问题,所以如果我只需要为一个班级做这件事,这里是代码:

class A:
  val = int()

  def __init__(self, val1): #val1 is a string
    self.val = val1

  def __setattr__(self, name, value):
    if isinstance(A.__dict__[name], int):
      self.__dict__[name] = int(value)

b = A("4")
print(type(b.val)) #prints <class 'int'>
德莱尼

使用aclassmethod获取派生类并将已知的self作为参数传递

class A:

  def __setattr__(self, name, value):
    self._setter(self, name, value)

  @classmethod
  def _setter(cls, self, name, value):
      if isinstance(getattr(cls, name), int):
         self.__dict__[name] = int(value)

class B(A):

  val = int()

  def __init__(self, val):
    self.val = val


b = B("4")
print(type(b.val), b.val)

您可以只在类中分配类型本身,而不是分配变量并使用其类型。我把它全部放在一个名为 dict 的字典中,schema因为它似乎更好地记录了我正在发生的事情。

class A:

  schema = {}

  def __setattr__(self, name, value):
    self._setter(self, name, value)

  @classmethod
  def _setter(cls, self, name, value):
      if name in cls.schema:
          value = cls.schema[name](value)
      self.__dict__[name] = value

class B(A):

  schema = {"val":int}

  def __init__(self, val):
      self.val = val

b = B("4")
print(type(b.val), b.val)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使子类自动调用超类方法

从超类调用子类方法

在子类上调用虚拟方法将返回超类数据

如何从修饰的子类方法中调用重写的超类方法

如何从重写的子类方法调用超类的继承方法?

Python-如何从子类实例调用超类的方法?

您如何在Java中从超类调用子类方法?

调用超类方法而不是子类方法

NSNotificationCenter从超类或子类调用方法?

如何使用最终方法PHP防止子类重写超类

如何在超类方法中使用子类参数?

当子类对象存储在超类数组中时,如何调用子类方法?

具有子类数据的超类方法

在子类的方法中本地调用超类方法时,使用“ super”关键字还是使用超类实例?

如何使超类方法返回子类的实例

超类和子类——方法使用

通过超类实例调用子类类的方法

如何确保某些方法从子类(Java)中的方法从抽象超类中调用

如何使用父类的方法调用子类的方法?

Java继承:创建子类实例时如何调用超类方法?

从Python超类运行方法时,如何知道调用它的子类的名称?

Java多态性如何调用子类对象的超类方法

Javascript ES6:如何从超类中定义的静态方法中检索调用子类

对子类中的子类方法使用超类参数

C ++如何使用具有超类指针的子类调用函数

Java:从超类构造函数中的子类调用的方法

确定用于调用子类中的方法的超类引用

从子类调用超类函数的正确方法

为什么从子类的超类调用方法中获得“ this”?