打开《Python入门与实战》_一步步学会Python_8.4.2 案例解析
119
2023-10-19
【摘要】 本书摘自《Python3快速入门与实战》一书中第6章,第4节,由肖冠宇、杨捷等编著。
6.4 访问权限
熟悉 Java、C++ 等面向对象编程语言的同学对访问权限应该比较熟悉,在 Java 和 C++ 中,公共访问权限使用 public 关键字修饰,私有访问权限使用 private 关键字修饰。但是在 Python 中,类的属性和方法的访问权限不需要任何关键字修饰,只需要在属性或者方法名前 添加两个下划线“__”即为私有的访问权限,反之都是公共访问权限。具有私有访问权限的 属性和方法只能在类内部访问,外部不能访问。
例6- 7 由于狗的年龄通常在1岁到20岁之间,为了防止外部对年龄属性随意修改设 置非法年龄,将Dog 类的年龄属性设置为私有属性,通过内部私有方法设置年龄属性值(源 代码位置: chapter06/6.4 访问权限.py)。
案例代码如下:
class Dog:
def i n it self;name):
self.name = name
self age=1# 私有属性
#私有方法,用于设置年龄
def set age(self,age):
self age = age
#设置名字和年龄属性
def set info(self,name,age):
#如果传入的名字不是空字符串,则给对象设置新的名字
if name!="":
self.name =name
#合法年龄是1岁到20岁
if age>0 and age<=20:
#调用私有方法设置年龄
self set age(age)
else:
print("年龄设置失败,非法年龄!")
def get info(self):
#在函数内访问私有属性 age"
print("我的名字是,我现在}岁。".format(self.name,self age))
wangcai =Dog("旺财")
wangcai.get info()
print("***我长大了***")
#给旺财设置新的年龄
wangcai.set info("",10)
wangcai.get info()
运行结果如下:
我的名字是旺财,我现在1岁。
***我长大了***
我的名字是旺财,我现在10岁。
解析:Dog 类内部的 get info 方法获取到了私有属性 age 的值,在 set jinfo 方法内调用 了私有方法 set age, 成功设置了私有属性 age 的值。说明具有私有权限的属性和方法在 类内部是可以被访问的。
例6-8 在类外部访问私有属性(源代码位置: chapter06/6.4 访问权限.py)。 案例代码如下:
wangcai=Dog("旺财")
print("我的名字是{},我现在{}岁。"format(wangcai.name,wangcai. age))
运行结果如下:
AttributeError:'Dog' object has no attribute ' age'
解析:在类外部试图通过实例对象访问私有属性 age 时,在程序执行时会报 AttributeError 异常,提示 Dog 实例对象没有 age 属性,证明在类外部无法访问私有属性,
同理私有方法在类外部也无法访问。
6.5 继承
面向对象编程带来的好处之一是代码重用,通过继承机制可以很好地实现代码重用。在 程序中继承描述了不同类之间,类型与子类型的关系。比如,在现实世界中猫和狗都属于动 物类,它们都具备动物的吃饭、喝水、移动等特征。那么在程序中可以把现实世界中的猫和 狗抽象为猫类和狗类,它们都继承自动物类。那我们称动物类为父类,猫类和狗类为动物类 的子类。
6.5.1 单继承
所谓单继承就是子类只继承自一个父类。
单继承类定义格式: class Son(Father)
单继承的特点:
● 子类只继承自一个父类,在定义子类时,子类类名后添加一个小括号,小括号中填 写父类的类名。
● 子类只会继承父类的非私有属性和非私有方法。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~