大家有没有想我呢?
今天讲一下类的一些概念:
公开属性 私有属性 基本方法 私有方法
直接上代码
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 合作了。
好了,关于对象的介绍暂时写到这里