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面向对象之私有属性和私有方法的更多相关文章

  1. Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

    一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...

  2. python面向对象学习(三)私有属性和私有方法

    目录 1. 应用场景和定义方式 2. 伪私有属性和私有方法 在java或者其他的编程语言中,使用访问修饰符来限制属性和方法的访问级别,一般有public.protected.default.priva ...

  3. python私有属性和私有方法

    私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私 ...

  4. Python - 面向对象编程 - 公共属性、保护属性、私有属性

    公共属性 在 Python 的类里面,所有属性和方法默认都是公共的 class PoloBlog: # 公共属性 sum = 0 # 构造方法 def __init__(self, name): se ...

  5. python (伪)私有属性和私有方法

    1.定义方式 在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法. 2.为什么要定义私有属性和私有方法 在实际开发中,对象的某些属性或方法只希望在对象的内部被使用,而不希 ...

  6. python-面向对象-06_私有属性和私有方法

    私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私 ...

  7. JavaScript 新语法详解:Class 的私有属性与私有方法

    译者按: 为什么偏要用 # 符号? 原文:JavaScript's new #private class fields 译者:Fundebug 本文采用意译,版权归原作者所有 proposal-cla ...

  8. Python3学习之路~6.5 私有属性和私有方法

    属性分为静态属性和动态属性,静态属性就是变量,动态属性就是方法.但是一般我们说的属性就是变量,方法就是方法.私有属性/方法就是外面访问不了,只有自己能够访问的属性/方法.如何将属性和方法分别变成私有属 ...

  9. 私有属性和私有方法l

    class Woman: def __init__(self, name): self.name=name self.__age=18 def __secret(self): print(" ...

随机推荐

  1. maven中,dependency 中的 classifier属性

    classifier元素用来帮助定义构件输出的一些附属构件.附属构件与主构件对应,比如主构件是 kimi-app-2.0.0.jar 该项目可能还会通过使用一些插件生成 如 kimi-app-2.0. ...

  2. js的函数三角恋

    原创,转载请标明来源https://www.cnblogs.com/sogeisetsu/ js的函数三角恋 1.什么是构造函数 是专门用于创建对象的 对象就是object **** 1.什么是函数? ...

  3. UGUI:技能冷却效果

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  4. 任务型对话(二)—— DST(对话状态追踪)

    1,概述 关于任务型对话的简介看任务型对话(一)—— NLU(意识识别和槽值填充). 首先我们来看下对话状态和DST的定义. 对话状态:在$t$时刻,结合当前的对话历史和当前的用户输入来给出当前每个s ...

  5. Makefile 中各种函数列举(进行 ing)

    1.wildcard : 扩展通配符    notdir : 去除路径    patsubst :替换通配符 举例:有文件  /a.c   /b.c   /home/a.c   /home/b.c  ...

  6. go处理XML

    XML 数据格式 对于如下的XML: <Person> <FirstName>Laura</FirstName> <LastName>Lynn</ ...

  7. 使用nodejs编写cli工具

    1.创建一个文件夹(my-cli); 2.在当前文件夹打开命令行输入 npm init,创建一个package.json,并配置bin字段,配置后才可以在控制台使用你的命令 "bin&quo ...

  8. 你真的了解java的lambda吗?- java lambda用法与源码分析

    你真的了解java的lambda吗?- java lambda用法与源码分析 转载请注明来源:cmlanche.com 用法 示例:最普遍的一个例子,执行一个线程 new Thread(() -> ...

  9. centos6.5 安装hadoop1.2.1亲测版

    本篇只简单介绍安装步骤  1. 角色分配 10.11.84.4 web-crawler--1.novalocal master/slave 10.11.84.5 web-crawler--2.nova ...

  10. Python【每日一问】28

    问: [基础题]:求 1+2!+3!+...+20! 的和 [提高题]:两个乒乓球队进行比赛,各出三人.甲队为 a,b,c 三人,乙队为 x,y,z 三人.已抽签决定比赛名单. 有人向队员打听比赛的名 ...