Python合集之面向对象(四)
1.访问限制
在类的内部可以定义属性和方法,而在类的外部则可以直接调用属性或方法来操作数据,从而隐藏了内部的复杂逻辑。但是PYthon并没有对属性和方法的访问权限进行限制。为了保证类内部的某些属性或方法不被外部所访问,可以在属性或者方法名前面添加双下划线,或者首尾加双下划线,从而限制访问权限。其中,双下划线,首尾双下划线的作用如下:
a.首尾双下划线表示定义特殊方法,一般是系统定义名字,如:__init__()
b.双下划线表示private类型的成员,只允许定义该方法的类本身进行访问,而且也不不能通过类的实例进行访问,但是可以通过类的实例名.__类名__XXX方式访问。
例如:
class Swan: '''天鹅类''' __neck__swan='天鹅的脖子很长' def __init__(self): print('__init__():',Swan.__neck__swan) swan=Swan() print("加入类名:",swan.Swan__neck__swan)
2.创建用于计算的属性
在Python中,可以通过@property将一个方法转换为属性,从而实现用于计算的属性。将方法转换为属性后,可以直接通过方法名来访问方法,而不需要在添加一对小括号,这样可以让代码更加简洁,语法格式如下:
@property def methodname(self): block 参数说明: methodname:用于指定方法名,一般使用小写字母开头,该名称最后将作为创建的属性名。 self:必要参数,表示类的实例 block:方法体,实现具体功能,在方法体重,通常已return语句结束,用于返回计算结果。
例如:
class Rect: def __init__(self,width,height): self.width=width self.height=height @property def area(self): return self.width*self.height rect=Rect(800,600) print("面积为:"rect.area)
注:通过@property转换后的属性不能重新赋值,如果对其重新赋值,将抛出异常。
3.为属性添加安全保护机制
在Python那种,默认情况下,创建类的属性或者实例是可以在类体外进行修改的,如果想要限制其不能在类的体外修改,可以将其设置为私有的,但是设置为私有后,在类的体外不能直接通过实例名+属性名获取他的值,如果想要创建一个可以读取但不能修改的属性,那么可以使用@property实现只读属性。
例如:
class TVshow: def __init__(self,show): self.__show=show @protery def show(self): return self.__show tvshow=TVshow("正在播放《战狼2》") print("默认:",tvshow.show)
花絮:
本期的Python 面向对象就分享到这里,下期我们将继续分享Python面向对象的相关知识,感兴趣的朋友可以关注我。
同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。