作者ck574b027 (荒围!定厝!贼!妹!)
看板Python
标题Re: [问题] 继承List的问题
时间Tue Mar 5 13:30:59 2013
※ 引述《imasa (便当侠)》之铭言:
: class A:
: m_list = []
: m_number = 1
: ...
: class B(A):
: def __init__ (self):
: A.__init__(self)
: pass
: ...
: class C(A):
: def __init__ (self):
: A.__init__(self)
: pass
: ...
: 我发现B和C继承A之後 m_number 这两个class各自都继承了一份
: 我可以个别操作他们
: 但是继承下来的 m_list 却都是A的 m_list
: 我 print B 或 C 的self.list,他们的address都是相同的
: 请问这是正常的吗?
: 如果是正常的话
: 那想要继承的B和C Class都各自有自己的一份 m_list 该怎麽作呢?
: p.s.: 我是使用Python2.7.3
部分恕删。
还满不正常的,我的A要继承object才能在B和C用__init__,直接贴你的code跑会有error
总之正常的继承像这样:
class A(object):
def __init__(self):
self.m_list = []
self.m_number = 1
class B(A):
def __init__ (self):
super(B, self).__init__()
class C(A):
def __init__ (self):
super(C, self).__init__()
b=B()
c=C()
print b.m_list is c.m_list # >>> False
################################################
super是built-in function,
简单来说会回传参数的parent class让你呼叫method。(原谅我这句话有许多语病)
你的code问题在於m_list = [] 与 self.m_list = []的差别,
前者只是建立A里的区域变数,接着B和C继承了A,也跟着继承区域变数,
因此你呼叫b.m_list有东西并不是__init__的功劳,那是天生的,
所以m_list理所当然address是相同的,因为你继承你爸的房子就可以说你有房子,
但你的房子和你爸的房子是同一栋啊。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.196.214
※ 编辑: ck574b027 来自: 140.109.196.214 (03/05 13:53)
1F:→ imasa:不好意思是我打错了,实际上是self.m_list跟self.m_enab才对 03/05 15:39
2F:→ ck574b027:那也很怪啊,直接用self不会跑出not defined? 03/05 16:02