如何使用子类中的数据调用超类方法?
How can I call superclass method with data from subclass?
我正在解析 XML 文件中的数据,我需要将其中一些数据转换为整数 - 当将它们设置为 B class 的属性时。由于我有多个 subclasses,我试图在 superclass 中编写一次代码,而不是必须在每个 subclass.
中编写代码
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
指的是superclass。我需要 subclasses 的那些。有什么想法吗?
我不确定我是否很好地解释了我的问题,所以这里是代码,如果我只需要为一个 class:
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'>
使用classmethod
得到派生class并将已知的自己作为参数传递
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)
您可以直接在 class 中分配类型本身,而不是分配变量并使用其类型。我把它全部放在一个名为 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)
我正在解析 XML 文件中的数据,我需要将其中一些数据转换为整数 - 当将它们设置为 B class 的属性时。由于我有多个 subclasses,我试图在 superclass 中编写一次代码,而不是必须在每个 subclass.
中编写代码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
指的是superclass。我需要 subclasses 的那些。有什么想法吗?
我不确定我是否很好地解释了我的问题,所以这里是代码,如果我只需要为一个 class:
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'>
使用classmethod
得到派生class并将已知的自己作为参数传递
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)
您可以直接在 class 中分配类型本身,而不是分配变量并使用其类型。我把它全部放在一个名为 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)