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

Python 如何使用子类中的数据调用超类方法?,python,inheritance,polymorphism,python-3.5,Python,Inheritance,Polymorphism,Python 3.5,我正在解析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()

我正在解析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))
我的问题是
\uu class\uu
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'>
A类:
val=int()
def uu init uu(self,val1):#val1是一个字符串
self.val=val1
定义设置属性(自身、名称、值):
如果isinstance(A._dict__[name],int):
self.\uuuu dict\uuuu[name]=int(值)
b=A(“4”)
打印(键入(b.val))#打印

使用
classmethod
获取派生类并将已知的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)
您可以在类中分配类型本身,而不是分配变量并使用其类型。我把这一切都放在一个名为
schema
的dict中,因为它似乎更好地记录了发生在我身上的事情

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)

创建class属性
val
似乎毫无意义。这不是实例属性的声明。这是一种使用相同名称保留实例属性所需类型的方法。注释也可以这样做。
self
指的是对象,而不是任何特定的类。我在这里使用class属性进行比较:isinstance(class.\u dict\u[name],int)