【python学习】python私有化和动态设置-25

这篇博客介绍了Python面向对象编程中的私有化特性,包括单下划线和双下划线的属性与方法。示例展示了如何访问和操作私有属性,以及使用`isinstance`、`hasattr`、`setattr`、`getattr`和`delattr`等方法进行对象属性的检查、设置和删除。此外,还通过例子说明了私有属性的访问限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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用法删除的时候,是不会打印内容


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值