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面向对象的相关知识,感兴趣的朋友可以关注我。

同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。

posted @ 2021-04-03 23:02  @睦  阅读(64)  评论(0编辑  收藏  举报