读书人

相干访问父类的实例成员

发布时间: 2013-10-13 14:03:53 作者: rapoo

有关访问父类的实例成员
我写了下列代码

 3 class First(object):
4 aa = "class"
5 def __init__(self):
6 self.aa = 3
7 print 'This is First init'
8
9
10 class Third(First):
11 def __init__(self):
12 self.aa = 4
13 First.__init__(self)
14 print "This is Third init"
15 def show(self):
16 print self.aa
17 print First.aa
18 th = Third()
19 th.show()

print First.aa 打印的是子类的类成员,有没有办法,打印父类的实例成员吗?
如果可以,得怎么写? python?父实?实例成员?
[解决办法]
试一下
print First().aa
[解决办法]
需要实例化,调用__init__才行,可以First().aa调用
[解决办法]
First是类对象,First.aa打印的是类对象的属性。
First是实例对象,Self.aa是存在于实例对象中的,所以要First().aa来访问
[解决办法]
引用:
我试了下,好象类成员同名的,父类与子类是同一个!

是这样子的,父类和子类中变量同名,值就会产生改写,或者父类改写子类,或者子类改写父类.

...
class Third(First):
def __init__(self):
self.aa = 4
First.__init__(self) #这块是父类改写子类的aa
print "This is Third init"
def show(self):
print self.aa#打印出来的是父类的值self.aa=3
print First.aa
th = Third()#子类对象
th.show()

Python是解释语言,无法预判类型,就无法对类对象进行强制转换,所以不能将子类的对象转换父类访问其变量和函数。Ptyhon中子类中的同名数据只有一份,(要么是父类的,要么是子类的),所以构造子类对象访问的数据要么是父类的,要么就是子类本身的。
[解决办法]
由于执行了 First.__init__(self),所以,self.aa 就赋值了,子类同时继承了这个值
你运行下面这段看看,我把 First.__init__(self) 注释了

class First(object):
aa = "class"

def __init__(self):
self.aa = 3
print 'This is First init'


class Third(First):
def __init__(self):
self.aa = 4
# First.__init__(self)
print "This is Third init"

def show(self):
print self.aa
print First.aa
print First().aa
th = Third()
th.show()

读书人网 >perl python

热点推荐