Python面向对象之私有属性和私有方法
1、 应用场景及定义方式
①应用场景
在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到
私有属性 就是 对象 不希望公开的 属性
私有方法 就是 对象 不希望公开的 方法
②定义方式
在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法

class Women:
def __init__(self, name):
self.name = name
# 不要问女人的年龄
self.__age = 18
def __secret(self):
print("我的年龄是%d" % self.__age)
a = Women('Alice')
print(a)
# # 私有属性,外部不能直接访问
# a.__age
# 私有方法, 外部不能直接访问
# a.__secret()
02. 伪私有属性和私有方法(科普)
提示:在日常开发中,不要使用这种方式,访问对象的 私有属性 或 私有方法
Python 中,并没有 真正意义 的 私有
在给 属性、方法 命名时,实际是对 名称 做了一些特殊处理,使得外界无法访问到
处理方式:在 名称 前面加上 _类名 => _类名__名称
print(a._Women__age) >> 18 # 私有属性外部不能直接访问
print(a._Women__secret()) >> 我的年龄是18 # 私有方法外部不能直接访问
03.get函数和set函数
解决外部访问私有属性问题
get函数和set函数为自定义函数,为了和封装概念吻合,命名为getXXX和setXXX
get函数:获取值
set函数:设置值【赋值,传值】
说明:本质都是一个普通成员函数,get函数一般有返回值,set设置参数
class Women:
def __init__(self, name):
self.name = name
# 不要问女人的年龄
self.__age = 18
def setAge(self):
self.__age = 18
def getAge(self):
return self.__age
def __secret(self):
print("我的年龄是%d" % self.__age)
a = Women('Alice')
print(a.getAge()) >> 18
04.@property装饰器
装饰器:给函数动态的添加功能,对于类的成员方法也可以使用装饰器
@property装饰器:将一个函数当做变量使用,简化get和set函数
使用:@property装饰器作用于一个函数,相当于get函数
与此同时会生成一个新的装饰器@属性名.setter,相当于set函数用于赋值
注意:@property装饰器只能使用在类中的成员方法中,简化代码,同时保证对参数进行校验
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age # 注意:函数的命名方式,get函数,
# 函数的命名并不是固定的,只要是一个合法的标识符即可,
# 但是,一般情况下,使用变量名命名,方便区分
@property
def name(self):
return self.__name # 注意:函数命名方式:和@property作用的函数名保持一致,
# 装饰器的命名方式:@属性名.setter
# 相当于是set函数,设置参数,给私有化属性进行赋值
@name.setter
def name(self, name):
self.__name = name @property
def age(self):
return self.__age @age.setter
def age(self, age):
if age < 0:
age = 0
self.__age = age
p1 = Person("jack", 15)
print(p1.name) #>>jack
p1.name = 'tom'
print(p1.name) #>>tom
Python面向对象之私有属性和私有方法的更多相关文章
- Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法
一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...
- python面向对象学习(三)私有属性和私有方法
目录 1. 应用场景和定义方式 2. 伪私有属性和私有方法 在java或者其他的编程语言中,使用访问修饰符来限制属性和方法的访问级别,一般有public.protected.default.priva ...
- python私有属性和私有方法
私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私 ...
- Python - 面向对象编程 - 公共属性、保护属性、私有属性
公共属性 在 Python 的类里面,所有属性和方法默认都是公共的 class PoloBlog: # 公共属性 sum = 0 # 构造方法 def __init__(self, name): se ...
- python (伪)私有属性和私有方法
1.定义方式 在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法. 2.为什么要定义私有属性和私有方法 在实际开发中,对象的某些属性或方法只希望在对象的内部被使用,而不希 ...
- python-面向对象-06_私有属性和私有方法
私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私 ...
- JavaScript 新语法详解:Class 的私有属性与私有方法
译者按: 为什么偏要用 # 符号? 原文:JavaScript's new #private class fields 译者:Fundebug 本文采用意译,版权归原作者所有 proposal-cla ...
- Python3学习之路~6.5 私有属性和私有方法
属性分为静态属性和动态属性,静态属性就是变量,动态属性就是方法.但是一般我们说的属性就是变量,方法就是方法.私有属性/方法就是外面访问不了,只有自己能够访问的属性/方法.如何将属性和方法分别变成私有属 ...
- 私有属性和私有方法l
class Woman: def __init__(self, name): self.name=name self.__age=18 def __secret(self): print(" ...
随机推荐
- 安装elasticsearch+kibana+searchguard
---------------------------------安装es的search-guard-------------------------------------------------- ...
- AjAX 异步通信
<!DOCTYPE html> <html lang="en"> <head> <title>xmlhttprequest ajax ...
- LCD编程_画点线圆
上篇博客中进行了lcd的简单测试,这篇博客将进行更加复杂的测试——画点.画线.画圆.画线和画圆是在画点的基础上实现的,因此本篇博客重点实现画点操作. 先抛出这样的一个问题,已知: (x,y)的坐标: ...
- var定义变量的使用细节
js中定义一个变量可以加关键词var也可以不加,规则是这样的: 1. 在全局范围内用不用var都可以,变量都是全局的 2. 在局部范围内比如函数中,用不用var是不一样的,用v ...
- 模板语言、url
伪造一个数据库全局变量 (字典无序) USER_LIST 列表变字典(元祖和列表直接循环就好,字典涉及到k_v) UESR_DICT 遍历方法 1. 2. 3. 4. 5. 6.键入链接 通过a标签包 ...
- MySQL中 ORDER BY 与 LIMIT 的执行顺序
如下: ORDER BY 与 LIMIT 的执行顺序:ORDER BY > LIMIT ORDER BY 与 LIMIT 的编写顺序:ORDER BY > LIMIT 正确写法: sele ...
- ESA2GJK1DH1K基础篇: 购买云服务器
我选择的是购买阿里云的服务器 如果是学生,可以选择 因为我用学生账户买过了,所以过程没法写了,下面我就写不用学生账户买的过程,其实应该配置过程和学生买差不多 选择购买的配置 选择系统 不需要配置直接下 ...
- ESA2GJK1DH1K基础篇: 测试APP使用SmartConfig绑定Wi-Fi 设备并控制设备
前言 实现功能概要 STM32控制WI-Fi模块以AT指令TCP透传方式连接MQTT服务器, 实现MQTT通信控制. 测试准备工作(详细下载步骤请参考 硬件使用说明 ) 一,下载单片机程序 二,安装A ...
- 第08组 Beta冲刺(1/5)
队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 检测网站不合理的地方,给组员定下相应时间进度的安排 展示GitHub当 ...
- 1473. [Ioi2000]Post加强版 n log^2 n做法
1473. [Ioi2000]Post加强版 n log^2 n做法 题面 有n个城市从负方向向正方向按照1至n标号,\(d[i]\)表示城市i离原点的距离并且\(d[1] = 0\),对于\(i \ ...