Python 类和对象(3)
阅读原文时间:2023年07月12日阅读:1

大家有没有想我呢?

今天讲一下类的一些概念:

公开属性 私有属性 基本方法 私有方法

直接上代码

class Makeup():
    brand = 'MAC'        #公开属性
    __producer = 'US'    #私有属性

    def basic(self):       #公开方法
        water = 'pat slightly1'
        essense = 'pat slightly2'
        print('water:%s, essense=%s' % (water,essense))

    def __advance(self):   #私有方法
        sunscreen = 'pat slightly3'
        foundation = 'apply a little for times'
        LoosePowder = 'up to you'
        print('sunscreen:%s, essense:%s, LoosePowder:%s' % (sunscreen, foundation, LoosePowder))

什么是公开属性、公开方法,什么是私有属性、私有方法呢?

我们平常用的是公开属性、公开方法,没有双下滑开头。

观察一下上面的代码,私有的属性or方法,都是双下滑线开头。

下面看一下它们在用法上的区别:

gg = Makeup()
print('公开属性 : %s' % gg.brand)
print('公开方法 : %s' % gg.basic)


公开属性 : MAC
公开方法 : <bound method Makeup.basic of <__main__.Makeup object at 0x00000092336DC278>>


print('私有属性 : %s' % gg.__producer)


---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-4-f097d14a7a25> in <module>()
----> 1 print('私有属性 : %s' % gg.__producer)

AttributeError: 'Makeup' object has no attribute '__producer'


print('私有方法 :%s' % gg.__advance)


---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-5-becc18ed0559> in <module>()
----> 1 print('私有方法 :%s' % gg.__advance)

AttributeError: 'Makeup' object has no attribute '__advance'

Obviously,在类的外部,是不可以调用私有方法的哦。

下面试试在类的内部调用属性:

class Makeup2():
    def __init__(self, brand, producer):
        self.brand = brand
        self.__producer = producer

    def open(self):       #公开方法
        print('公共方法调用公共属性 : %s' % self.brand)        #类的内部调用公共属性
        print('公共方法调用私有属性 : %s' % self.__producer)   #类的内部调用私有属性

    def __private(self):   #私有方法
        print('私有方法调用公有属性 : %s' % self.brand)       #类的内部调用公共属性
        print('私有私有属性 : %s' % self.__producer)          #类的内部调用私有属性


gg2 = Makeup2('LANCOME', 'Big BOSS')
gg2.open()


公共方法调用公共属性 : LANCOME
公共方法调用私有属性 : Big BOSS


gg.__private()


---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-19-5025310145e8> in <module>()
----> 1 gg.__private()

AttributeError: 'Makeup' object has no attribute '__private'

Anyway,私有方法始终是大佬,别想调用她。(好高冷哦!)妹子好难撩哦……

但是公共方法下,公共属性、私有属性都可以调用。嗯,最喜欢跟你这种 Beauty 合作了。

好了,关于对象的介绍暂时写到这里