python私有方法和私有属性

本文详细介绍了Python中如何定义私有属性和方法,并通过示例解释了它们的工作原理及应用场景。此外还讨论了如何保护对象属性的安全。

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

 

Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了

声明该方法为私有方法,不能在类的外部调用

代码

class Test(object):
    #普通方法
    def test(self):
        print("普通方法test")
    #普通方法
    def _test1(self):
        print("普通方法_test1方法")
    #私有方法
    def __test2(self):
        print("私有方法__test2方法")

t = Test()
t.test()
t._test1()
#t.__test2()#调用的时候会报错

执行效果

 

外界无法访问私有方法,但可以在类内部方法私有方法。

class Test(object):
    #私有方法
    def __test2(self):
        print("私有方法__test2方法")
    #普通方法
    def test(self):
        print("普通方法test")
    #普通方法
    def _test1(self):
        print("普通方法_test1方法")
        #可以在类内部调用私有方法
        t.__test2()#
        self.__test2()
t = Test()
t.test()
t._test1()
#t.__test2()和t.test2()#调用的时候会报错

  私有方法应用场景

 

执行效果

私有属性

如果有一个对象,当需要对其进行修改属性时,有2种方法

对象名.属性名 = 数据 ---->直接修改

对象名.方法名() ---->间接修改

为了更好的保存属性安全,即不能随意修改,一般的处理方式为

将属性定义为私有属性

添加一个可以调用的方法,供调用

案例

class Person(object):
    def __init__(self, name):
        self.__name = name
    def get_name(self):
        return self.__name
    def set_name(self, new_name):
        if len(new_name) >= 5:
            self.__name = new_name
        else:
            print("error:名字长度需要大于或者等于5")

xiaoming = Person("skyter")
print(xiaoming.get_name())
#print(xiaoming.__name)#会报错

class Person(object):
    def __init__(self, name):
        self.__name = name

    def get_name(self):
        return self.__name

    def set_name(self, new_name):
        if len(new_name) >= 5:
            self.__name = new_name
        else:
            print("error:名字长度需要大于或者等于5")


p = Person("skyter")

p.set_name("wanger")
print(p.get_name())

p.set_name("lisi")
print(p.get_name())

执行如图:

 总结

Python中没有像C++中public和private这些关键字来区别公有属性和私有属性

它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。

 

Python 中,类的私有属性是通过在属性名前添加双下划线 `__` 来定义的,这种命名方式会触发 Python 的名称改写(name mangling)机制,使得私有属性在类外部不能直接通过原始名称访问。尽管如此,Python 仍然提供了一些方式来访问操作私有属性。 ### 使用 Getter Setter 方法 一种常见的做法是在类中定义公共方法(getter setter),通过这些方法访问或修改私有属性。这种方式提供了对私有属性的受控访问。 ```python class Person: def __init__(self): self.__age = 18 # 定义一个私有化属性 def get_age(self): return self.__age def set_age(self, age): if age <= 0: print('年龄不能小于0') else: self.__age = age ``` 在这个例子中,可以通过调用 `get_age()` 方法来获取私有属性 `__age` 的值,并通过 `set_age(age)` 方法来设置其值。 ### 使用 `property` 函数 为了使访问私有属性更加直观,可以使用 `property` 函数,它允许像访问公共属性一样访问私有属性,而不需要显式地调用 getter setter 方法。 ```python class Person: def __init__(0): self.__age = 18 # 定义一个私有化属性 def get_age(self): return self.__age def set_age(self, age): if age <= 0: print('年龄不能小于0') else: self.__age = age age = property(get_age, set_age) # 定义 property 属性 ``` 现在,可以像这样访问修改 `__age` 属性: ```python p = Person() print(p.age) # 调用 get_age() p.age = 20 # 调用 set_age(20) ``` ### 直接访问(不推荐) 虽然 Python私有属性设计为不可直接访问,但由于名称改写机制只是将属性名进行了重命名(例如 `__age` 变成了 `_Person__age`),因此仍然可以通过改写后的名称直接访问私有属性。 ```python p = Person() print(p._Person__age) # 直接访问私有属性 p._Person__age = 20 # 修改私有属性 ``` 这种方式虽然可行,但通常不被推荐,因为它破坏了封装性,并可能导致代码难以维护。 ### 总结 Python 提供了多种方式来访问类的私有属性,包括使用 getter/setter 方法、`property` 函数以及直接访问改写后的属性名。推荐使用 `property` 或者 getter/setter 方法来实现对私有属性的安全访问修改。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值