私有属性和方法的使用 | 学习笔记

简介: 快速学习 私有属性和方法的使用

开发者学堂课程【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__(selfname,age) :

self.name = name

self.age = age

self.__money = 1000  # 以两个下划线开始的变量是私有变量

p=Person("张三"18)

print(p.name, p.age)  # 可以直接获取到

# print(p.__money)  # 不能够直接获取到私有变量

image.png

在写完代码之后,p 指向了一个内存空间,内存空间里有 name agename age 是普通的属性,可以直接获取。

除了这个之外在 python 里还有私有属性,以两个下划线开始的变量是私有变量。 __money 是一个私有变量,不能通过 p 直接获取。


三、获取私有变量的方式

python 里很多私有的规定并不是真的私有,在程序里面很多时候所谓的私有变量都是可以通过多种方式获取到的。

1. 使用 对象._类名__私有变量名获取

print(p._Person__money)  # 通过这种方式也能获取到私有属性

class Person(object):

def __init__(selfname,age) :

self.name = name

self.age = age

self.__money = 1000# 以两个下划线开始的变量是私有变量

def test(self):

self.__money += 10# 在这里可以访问私有属性

私有的属性在外面不能访问但是在类里是可以访问的。写下 p.test() 本来有1000块钱运行之后就变成了1010块钱。

2. 定义 get set 方法来获取

image.png

在外面想访问 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

相关文章
|
监控 Java 应用服务中间件
jdk自带监控程序-jvisualvm使用介绍
jdk自带监控程序-jvisualvm使用介绍
629 0
|
9月前
|
前端开发 JavaScript 安全
剖析跨域问题始末及其解决方案——前端必备交叉知识(一)
跨域问题是前端开发中的常见挑战,了解并掌握不同的跨域解决方案能帮助你更高效地进行开发工作。本文对同源策略、跨域以及解决跨域的三种方案: CORS、JSONP、代理等跨域技术进行了介绍。选择合适的跨域解决方案非常重要。 在实际开发中,推荐优先考虑使用 CORS,因为它是现代浏览器支持的标准,且安全性较高。如果服务器无法修改,则可以考虑使用代理。如果是特殊情况,可以使用 JSONP,但要注意安全性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错
|
Linux 网络安全 数据安全/隐私保护
Linux系统之Centos7安装cockpit图形管理界面
【10月更文挑战第12天】Linux系统之Centos7安装cockpit图形管理界面
497 1
Linux系统之Centos7安装cockpit图形管理界面
|
传感器 监控 搜索推荐
智能纺织品:可穿戴科技的新潮流
【9月更文挑战第22天】智能纺织品作为可穿戴科技的新潮流,正以其独特的魅力和卓越的性能,引领着纺织行业的创新发展。随着技术的不断进步和应用领域的不断拓展,智能纺织品将在更多领域得到应用和推广,为人们的生活带来更多便利与可能性。我们有理由相信,在不久的将来,智能纺织品将成为人们生活中不可或缺的一部分,共同推动社会的可持续发展与繁荣。
|
Oracle IDE Java
Java零基础教学(04):如何Java环境配置??
【8月更文挑战第4天】Java零基础教学篇,手把手实践教学!
294 1
|
监控 C# C++
Baumer工业相机堡盟相机如何使用HDR高动态范围功能( HDR功能的优点和行业典型应用)(C++)(C#)
Baumer工业相机堡盟相机如何使用HDR高动态范围功能( HDR功能的优点和行业典型应用)(C++)(C#)
492 0
|
Java 消息中间件 缓存
JAVA中BIO、NIO、AIO的分析理解
本文分析阻塞、非阻塞、同步和异步概念上的区别以及各种IO模型的操作流程,同时分析BIO、 NIO、 AIO的通信机制,并通过demo深入比较三种IO的优缺点。输入输出(IO)是指计算机同任何外部设备之间的数据传递。常见的输入输出设备有文件、键盘、打印机、屏幕等。数据可以按记录(或称数据块)的方式传递,也可以 流的方式传递 。所谓记录,是指有着内部结构的数据块。记录内部除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述。
14633 5
|
存储 缓存 前端开发
操作系统期末实验:多用户二级文件系统
操作系统期末实验:多用户二级文件系统
591 0
241Echarts - 3D 散点图(Scatter3D)
241Echarts - 3D 散点图(Scatter3D)
539 0
|
传感器 芯片
漫谈高通量测序(3)Illumina文库构建
漫谈高通量测序(3)Illumina文库构建
923 0
漫谈高通量测序(3)Illumina文库构建