【发布时间】:2017-04-13 05:41:53
【问题描述】:
是否可以跨多个子类在基类内的子类中动态创建/设置变量而不影响其他子类?
例如,这里的代码:
class Base:
@classmethod
def __init__(cls,v):
cls.v=v
class sub1(Base):
Base.__init__(1)
class sub2(Base):
Base.__init__(5)
在该代码中,当创建sub1 时,其v 属性等于1。但是当创建sub2 时,sub1 和sub2 的v 属性变为5。我想我可能知道这是为什么。我假设基类的@classmethod 实际上并没有设置子类的属性,而是它自己的属性。然后在子类中继承该属性。我的问题是:如何使用这种继承来设置子类的属性,而不是继承的基类的属性。
换句话说,我希望能够使用类似的结构,如果可能的话(或者至少是一个简单的结构),以便在子类中设置特定于子类的属性,而不是简单地从全局继承基类。
这可能吗?
【问题讨论】:
-
有什么原因你不能这样做:
v = 1insub1和v = 5insub2?类语句主体内的赋值,在任何方法之外,已经定义了类属性;你不需要特殊的方法来做到这一点。将__init__设置为classmethod听起来好像你真的想要一个元类,但如果你只想设置一个类属性,那就太矫枉过正了......
标签: python python-3.x inheritance subclassing class-instance-variables