浅谈类及对象的字段和方法
admin
2023-07-17 21:23:58
0

类:

类是某种类型集合的描述。

我们把拥有相同属性的事务叫做类,里面封装了相同的方法。比如人,汽车等。


对象:

对象是由类创建的实例。对象的三个特性:身份,类型,值,在这里不做描述。


类的私有属性及访问方式:

外部想要访问类的私有属性有两种方式:

1:类内创建一个函数,来返回私有属性

2:类特性


对象的私有字段:

创建一个类如下:

class Province:

    memo = "中国的23个省之一"   #是类的字段,是属于类的,不属于对象,这个属于类的静态字段,属于类

    def __init__(self,name,captial,leader,flag):

        self.Name=name              #通过self创建的字段叫做动态字段,不像静态字段,动态字段属于对象

        self.Captial=captial

        self.Leader=leader

        self.__happy = flag      #创建对象的私有字段
XZ=Province("西藏","乌鲁木齐","×××",True)   #实例化类,就是创建了个对象
print XZ.Captial
print XZ.__happy

执行结果如下:

Traceback (most recent call last):

  File "F:\lvsir\workspace\pystudy-oldboy\oop\privat_filld.py", line 47, in 

乌鲁木齐

    print XZ.__happy

AttributeError: Province instance has no attribute '__happy'

此例可见,私有字段是外部不可直接访问的;外部若想访问对象的私有字段,可以再在类中创建一个函数,来显示私有字段,代码如下:

class Province:
    ...
    ...
    def show(self):             #在类中创建一个查看实例私有字段的方法

        return self.__happy
XZ=Province("西藏","乌鲁木齐","×××",True)
print XZ.show()   #调用show方法

执行结果如下:

True

 


还是上面的例子,添加私有方法代码如下:

class Province:

    ...

    ...
    def __Hello(self):           #定义私有方法,直接使用类实例是访问不到的,在类中可以访问的到

        print "Hello,world"
    def access_hello(self):    #创建一个访问私有方法的函数

        print self.__Hello()
XZ=Province("西藏","乌鲁木齐","×××",True)
print XZ.__Hello

直接访问对象的私有方法,执行结果如下:

Traceback (most recent call last):

  File "F:\lvsir\workspace\pystudy-oldboy\oop\privat_filld.py", line 49, in 

    print XZ.__Hello

AttributeError: Province instance has no attribute '__Hello'


使用第一种方法访问私有方法

print XZ.access_hello()     #调用类实例的访问私有方法的函数
Hello,world

由上可见,类的私有方法对象是不能直接访问的,也可以通过类内可访问私有方法的方法间接访问

 


使用类特性访问私有方法:

class Province:


    ...


    ...
    @property                  #创建类特性,返回私有方法

    def Hello(self):

        return self.__Hello()
XZ=Province("西藏","乌鲁木齐","×××",True)
print XZ.Hello            #直接调用类特性,以字段的方式访问,不需要带括号

执行结果如下:

Hello,world


类的私有字段的只读和只写

我们创建一个新类,代码如下:

class Province1:
    def __init__(self,name,flag):
        self.name=name
        self.__Hello = flag
    
    @property                 #只读的私有字段,是可以访问的,但是不能修改
    def Heloo(self):
        return self.__Hello
TW = Province1('台湾',True)

print TW.Heloo

TW.Heloo=False

print TW.Heloo

执行结果如下:

True

Traceback (most recent call last):

  File "F:\lvsir\workspace\pystudy-oldboy\oop\privat_filld.py", line 76, in 

    TW.Heloo=False

AttributeError: can't set attribute

是可以读到私有字段的,但是不能修改

下面添加代码,是私有字段可以访问并且可写,前提是类要继承object,代码如下:

class Province1(object):
    def __init__(self,name,flag):
        self.name=name
        self.__Hello = flag
    
    @property                 #只读的私有字段,是可以访问的,但是不能修改
    def Heloo(self):
        return self.__Hello
    @Heloo.setter             #可改的私有字段,可以访问,也可以修改,可以的私有字段的类要继承object
    def Heloo(self,value):
        self.__Hello=value
TW = Province1('台湾',True)

print TW.Heloo

TW.Heloo=False

print TW.Heloo

执行结果如下:

True

False

 

相关内容

热门资讯

应急演练强保障,蔡甸供电精准守... 极目新闻通讯员 胡莉娜 张书烨 “设备温度正常、负荷数据稳定,UPS电源运行无异常,双电源切换试验圆...
人工智能在医疗领域的应用与挑战 人工智能在医疗领域的应用与挑战 一、人工智能在医疗中的主要应用 人工智能正逐步改变传统医疗模式,其核...
原创 每... 放眼夜空,一场看不见的太空大戏正在上演,SpaceX公司旗下的“星链”卫星正以惊人速度坠入地球大气层...
每年这个时候,民进党总要幼稚地... 一年一度的海峡论坛即将在厦门如期举办,作为两岸民间交流的重要盛会,论坛始终聚焦基层对接、民生互通与青...
网红“阿全哥”车祸离世,留下4... 极目新闻记者 杜光然近日,家属通过网红“双山阿全哥”的账号发布讣告称,5月底,44岁的阿全哥因车祸不...
致命超载:8名蓝莓采摘女工殒命... 澎湃新闻记者 陈蕾 编辑 黄霁洁 实习生 余乐 元珂盈 冼浩新 王圣铭天还没亮,60岁的农妇王盛兰摸...
中外人士共话AI赋能全球航运新... 转自:新华社 新华财经天津6月6日电(杨文 包庆龄) “人工智能(AI)正在深刻改变港口运营的模式,...
我科学家找到深海水虱抗饿的绝招 深海水虱是一类生活在深海中的甲壳动物,因保持世界上最长的绝食时间纪录(可达5年以上)而闻名。近日,我...
俄石油巨头CEO:霍尔木兹海峡... 据路透社6月6日报道,俄罗斯石油公司(Rosneft)首席执行官伊戈尔·谢钦在圣彼得堡国际经济论坛上...
原创 什... 近日,有机构发布了4月份,国内线上家用路由器市场情况。 从销量来看,一共卖出了86.2万台,同比下滑...