【发布时间】:2020-06-11 23:03:49
【问题描述】:
我正在解析 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'>
【问题讨论】:
-
创建 class 属性
val似乎没有意义。这不是实例属性的声明。 -
这是一种保持我想要的具有相同名称的实例属性的类型的方法。
-
评论也可以做到这一点。
-
self指的是 object,而不是任何特定的类。 -
这里我使用class属性进行比较:isinstance(class.__dict__[name], int)
标签: python inheritance polymorphism python-3.5