1.为什么要使用私有属性和私有方法
-
嘿,各位Python爱好者们,你们有没有遇到过这样的情况:你正在编写一个类,里面有一些属性或方法,你并不想让它们被外部直接访问或修改,但又需要某种方式来控制它们的访问和修改。这就要使用到Python中的私有属性和私有方法。
-
简单来说,私有属性和私有方法可以帮助我们封装数据和方法,提高代码的可维护性和安全性。想象一下,如果你的属性或方法被外部直接访问或修改,那么你的代码可能会变得非常脆弱,很容易受到各种攻击或者错误的使用。
2.私有属性
-
在Python中,你可以通过在属性名前面加上两个下划线来创建私有属性。这意味着这个属性只能被类内部的方法访问,而不能被类的外部代码所访问。这样做的好处是可以隐藏类的实现细节,只暴露必要的方法和属性,使得类的内部更加安全和可控。
3.私有方法
-
私有方法在Python中的表示方式与私有属性类似,也是在方法名前面加上两个下划线。与私有属性不同的是,私有方法只能被同一个类中的其他方法所调用,而不能被类的外部代码所调用。
4.举例子
-
定义类
# 定义类
class Girl():
# 构造函数
def __init__(self, name, sex, height):
self.name = name
self.sex = sex
self.height = height
# 在属性的前面加 __ 就变为私有属性
self.__age = 18
# 定义一个方法,提供给类的外部访问私有属性,但是一般会设置限制条件,当条件满足后,可以访问私有属性
def sayAge(self, boyFriend):
if boyFriend == "小明":
print("我的年龄是:", self.__age)
else:
print("女孩的年龄是密码不能随意打听...")
# 方法
def say(self):
print("说话的方法")
# 私有方法:在方法名的前面加 __
def __kiss(self):
print("一吻定终生")
# 在类的内部可以调用私有方法,一般会设置限定条件,若条件满足,则调用私有方法,若条件不满足,则不调用私有方法
def love(self, relation):
if relation == "情侣":
self.__kiss()
else:
print("__kiss是私有方法,不能随意调用...")
# 创建对象
girl = Girl("小兰", "女", 168)
# 通过对象访问属性(公有属性)
print(girl.name)
print(girl.sex)
print(girl.height)
# 通过对象访问方法(公有方法)
girl.say()
# 在类的外部不能直接访问私有属性
# print(girl.__age) # AttributeError: 'Girl' object has no attribute '__age'
# 通过公开的对外的方法,传入条件,条件满足能访问到私有属性,条件不满足不能访问私有属性
girl.sayAge("小光") # 女孩的年龄是密码不能随意打听...
girl.sayAge("小明") # 我的年龄是:18
# 在类的外部不能直接调用私有方法
# girl.__kiss() # AttributeError: 'Girl' object has no attribute '__kiss'
# 通过公开的对外的方法,传入条件,条件满足能调用私有方法,条件不满足不能调用私有方法
girl.love("朋友")
girl.love("情侣")
-
执行结果
小兰
女
168
说话的方法
女孩的年龄是密码不能随意打听...
我的年龄是:18
__kiss是私有方法,不能随意调用...
一吻定终生