python面向对象 - 私有化:
1、_属性/_方法
约定俗成。
通过对象名._属性/_方法实际上是可以访问的。
但是它的意思就是,别访问我,我是私有化。全靠自觉
2、__属性/__方法
深度私有。
通过对象名.__属性/__方法访问不到。
只有类内部可以访问。
class dog:
def __init__(self,colour_a):
self.colour_a=colour_a
self._colour_b = "白色"
self.__colour_c = "黑色"
def dogs(self):
print("小狗颜色是{}".format(self._colour_b))
tt=dog("花色")
print(tt.colour_a)
print("浅度私有",tt._colour_b)
print("深度私有",tt.__colour_c)
----------------------------运行结果----------------------------
花色
浅度私有 白色
Traceback (most recent call last):
print("深度私有",tt.__colour_c)
AttributeError: 'dog' object has no attribute '__colour_c'
class dog:
def __init__(self,colour_a):
self.colour_a=colour_a
self._colour_b = "白色"
self.__colour_c = "黑色"
def dogs(self):
print("小狗颜色是{}".format(self.__colour_c))
tt=dog("花色")
print(tt.colour_a)
print("浅度私有",tt._colour_b)
tt.dogs()
# print("深度私有",tt.__colour_c)
----------------------打印结果----------------------
花色
浅度私有 白色
小狗颜色是黑色
注*:
如果类内部定义了访问私有的方法。可以通过这个方法得到私有属性的值。
如果没有定义的话,那私有属性就是除了类以外,都不可以访问
判断某一个对象,是否为类的一个实例,语法:isinstance
hasattr(类/对象, 属性) - 类/对象 是否有某个属性
setattr(类/对象, 属性, 值) - 给类/对象 设置某个属性(有则修改,无则添加)
getattr(类/对象, 属性) - 获取类/对象 某个属性的值
delattr(类/对象, 属性) - 删除类/对象 某个属性
用法:
'''
hasattr、setattr、getattr、delattr的使用
hasattr(类/对象, 属性) - 类/对象 是否有某个属性
setattr(类/对象, 属性, 值) - 给类/对象 设置某个属性(有则修改,无则添加)
getattr(类/对象, 属性) - 获取类/对象 某个属性的值
delattr(类/对象, 属性) - 删除类/对象 某个属性
'''
class dog:
def __init__(self,colour,hair,size):
self.colour=colour
self.hair=hair
self.size=size
def dogs(self):
print("小狗颜色是{}".format(self.colour))
tt=dog("黄色","金毛","大")
print("hasattr用法"+"-"*30)
print(hasattr(tt,"height")) #类属性当中是否有height,有就True,没有就False
print(hasattr(tt,"colour")) #类属性当中是否有colour,有就True,没有就False
print("setattr用法"+"-"*30)
setattr(tt,"height","好高") #如果类属性当中没有height,那么就在原本基础添加
setattr(tt,"colour","白色") #如果类属性当中有colour,那么就在原本基础修改
#setattr用法,修改或者添加的时候,是不会打印内容
print("#setattr用法,修改或者添加的时候,是不会打印内容")
print("getattr用法"+"-"*30)
print(getattr(tt,"height")) #获取height的属性值
print(getattr(tt,"colour")) #获取colour的属性值
print("colour用法"+"-"*30)
delattr(tt,"colour") #删除colour的属性值
#colour用法删除的时候,是不会打印内容
print("#colour用法删除的时候,是不会打印内容")
-------------------------打印结果-------------------------
hasattr用法------------------------------
False
True
setattr用法------------------------------
#setattr用法,修改或者添加的时候,是不会打印内容
getattr用法------------------------------
好高
白色
colour用法------------------------------
#colour用法删除的时候,是不会打印内容