Python 如何使用子类中的数据调用超类方法?
我正在解析XML文件中的数据,我需要将其中的一些数据转换为整数——当将它们设置为B类的属性时。因为我有多个子类,所以我尝试在超类中编写一次代码,而不是在每个子类中编写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()
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)