开发者学堂课程【Python入门 2020年版:私有属性和方法的使用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10380
私有属性和方法的使用
内容介绍:
一. 定义方法
二. 私有属性的使用
三. 获取私有变量的方式
四. 私有函数
在实际开发中,对象的某些属性或者方法可能只希望在对象的内部别使用,而不希望在外部被访问到,这时就可以定义私有属性和私有方法。
一、定义方法
在定义属性或方法时,在属性名或者方法名前增加两个下划线 __ ,定义的就是私有属性或方法。
class Person;
def __init__( self , name , age):
self.name = name
self.age = age
self._money = 2000
# 使用 __ 修饰的属性,是私有属性
def __shopping(self, cost):
self.__money -= cost
# __money只能在对象内部使用
print('
还剩下%d元'%self.__money)
def test(self):
self.__shopping(200) # __shopping
方法也只能在对象内部使用
二、私有属性的使用
如有有一个变量只想在内部使用而不想被外部使用就可以把这个变量定义为私有变量。
class Person(object):
def __init__(self
,name,age) :
self.name = name
self.age = age
self.__money = 1000
# 以两个下划线开始的变量是私有变量
p=Person("
张三",18)
print(p.name, p.age)
# 可以直接获取到
# print(p.__money)
# 不能够直接获取到私有变量
在写完代码之后,p 指向了一个内存空间,内存空间里有 name 和 age。name 和 age 是普通的属性,可以直接获取。
除了这个之外在 python 里还有私有属性,以两个下划线开始的变量是私有变量。 __money 是一个私有变量,不能通过 p 直接获取。
三、获取私有变量的方式
在 python 里很多私有的规定并不是真的私有,在程序里面很多时候所谓的私有变量都是可以通过多种方式获取到的。
1. 使用 对象._类名__私有变量名获取
print(p._Person__money)
# 通过这种方式也能获取到私有属性
class Person(object):
def __init__(self
,name,age) :
self.name = name
self.age = age
self.__money = 1000
# 以两个下划线开始的变量是私有变量
def test(self):
self.__money += 10
# 在这里可以访问私有属性
私有的属性在外面不能访问但是在类里是可以访问的。写下 p.test() 本来有1000块钱运行之后就变成了1010块钱。
2. 定义 get 和 set 方法来获取
在外面想访问 money 可以定义一个函数,这个函数可以被用户调用也可以访问到 money ,这个函数叫接口函数。接口可以被用来让前端页面和后端服务器之间传递数据。
class Person(object) :
def ___init__(self,name,age):
self.name = name
self.age = age
self._money = 1008
#以两个下划线开始的变量是私有变量
def get_money(self):
return self._money
想要获取 money 可以使用 print(p.get_money())。
import datetime
class Person(object):
def _init__(self,name,age) :
self.name = name
self.age = age
self._money = 1000
# 以两个下划线开始的变量是私有变量
def get_money(self):
print(‘{}
查询了余额’.format(datetime. datetime.now()))
return self.__money
创建私有变量并使用函数调用的目的是为了记录很多信息
import datetime
class Person(object):
def _init__(self,name,age) :
self.name = name
self.age = age
self._money = 1000
# 以两个下划线开始的变量是私有变量
def get_money(self):
print(‘{}
查询了余额’.format(datetime. datetime.now()))
return self.__money
def set_money(self,qian) :
if type(qian) != int:
print('
设置的余额不合法")
return
print('
修改余额了')
self._money = qian
想要修改钱数可以输入 p.set_money() ,如果修改了余额运行后就会显示修改余额了。
如果输入 p.set_money(‘hello’)把钱改成了字符串,那么就会显示设置的余额不合法并且钱数不做更改。
1. 使用 property 来获取(有机会的话补充)
四、私有函数
以两个下划线开始的函数,是私有函数,在外部无法调用
class Person(object):
def _init__(self,name,age) :
self.name = name
self.age = age
self._money = 1000
# 以两个下划线开始的变量是私有变量
def _demo(self):
# 以两个下划线开始的函数,是私有函数,在外部无法调用
print("我是 demo 函数, name=f ‘.format( self.name ))
def test(self):
self.__demo()
p. __demo()
# 不能直接调用demo 函数,它是私有方法
p._Person __demo()
# 可以通过Person 调用