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. BSGS算法(大小步算法)

    $BSGS$ 算法 $Baby\ Steps\ Giant\ Steps$. 致力于解决给定两个互质的数 $a,\ p$ 求一个最小的非负整数 $x$ 使得 $a^x\equiv b(mod\ p)$ ...

  2. Nginx下HTML页面POST请求静态JSON数据返回405状态

    在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为G ...

  3. 201800628模拟赛T2——最大土地面积

    题目描述 在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 输入输出格式 输入格式: 第1行一个正整数N,接下来N行,每行2个数x,y ...

  4. LuoguP5540:【模板】最小乘积生成树(几何逼近)

    题意:给定N点,M边,每条边有两个属性(a,b),现在让你选N-1条边出来,然后使得∑a*∑b最小.N<200,M<1e4: 思路:我们把∑a看成x,∑b看成y,那么一个方案对应一个二维坐 ...

  5. python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射

    多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...

  6. 【树形DP】【P3177】[HAOI2015] 树上染色

    Description 给定一棵 \(n\) 个点的带权树,要求选 \(k\) 个点染成黑色,剩下染成白色,最大化两两同色点之间的距离和. Limitations \(0 \leq k \leq n ...

  7. ros ap 的无线中继

    https://wiki.mikrotik.com/wiki/Manual:Interface/Wireless#Repeater Wireless repeater will allow to re ...

  8. #ifndef #define #endif

    在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误.在头文件中实用#ifndef #define #endif能避免头文件的重定 ...

  9. 常用war包插件

    <build> <resources> <resource> <directory>src/main/java</directory> &l ...

  10. build gradle dependencies闭包的详解

    转 :https://blog.csdn.net/guanguanboy/article/details/91043641 dependencies闭包的整体功能是指定当前项目所有依赖关系:本地依赖. ...