'''
“单下划线开头” 的成员变量叫做保护变量,意思是只有类对象和子类对象才能访问到这些变量。
单个下划线需要注意的是,super继承了父类的_age变量,所以,子类才能调用保护变量
“双下划线开头” 的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
如果实在想访问,可以用self._animal__age这种方式来访问
'''
class animal(object):
name='tom'
def __init__(self,name):
self.name=name
self.__age=18
self._hobby='蹦极'
def getting(self):
print('我叫%s,今年%s岁'%(self.name,self.__age))
print('%s的兴趣是%s'%(self.name,self._hobby))
@classmethod
def get_fjh(self):
return self.name
class dog(animal):
def __init__(self,name,food):
super(dog,self).__init__(name)
#调用suprt时,name在子类初始化时也必须要有吗?为什么,就是这么定义的吗?
self.food=food
self.name=name
def get(self):
#print('我喜欢吃%s,今年%s岁' % (self.food, self.__age))#这样就不行,私有属性__age只限于类本身调用,子类不能访问
print('我喜欢吃%s,今年%s岁' % (self.food, self._animal__age))
print('%s的兴趣是%s'%(self.name,self._hobby))
d=dog('alex','包子')
print(d.name)
d.getting()
print(d._animal__age)#只限于类本身调用,子类不能访问
#print(d.__age)#子类想直接访问就不行
d.get()
a=animal('alexffff')
a.getting()
print(a.get_fjh())
疑问就是:
def __init__(self,name,food):
super(dog,self).__init__(name)
#调用suprt时,name在子类初始化时也必须要有吗?为什么,就是这么定义的吗?