python学习13类2之封装
''''''
'''
面向对象三大特性:封装,继承,多态
1.封装: 类中以_或者__的属性,都是私有属性,禁止外部调用。
'''
class Student(object): def __init__(self,name,age,sex):
self.__name = name
self.__age = age
self.__sex = sex one = Student('wsx',18,'男') print(one._Student__name)
print(one._Student__age)
print(one._Student__sex) one._Student__age = 20
print(one._Student__age) #print(one.__name) # 报错,__name被私有化,封装起来了,所以外界无法访问,找不到该属性
#print(one.name) # 报错,无该属性
'''
上述封装方式,调用起来比较麻烦。
现在我将name,age,sex设置为私有属性,但是我又想让他们通过我指定的接口去访问或者修改我的属性,应该如何实现了?
'''
class Student1(object): def __init__(self,name,age,sex):
self.__name = name
self.__age = age
self.__sex = sex def get_name(self):
return self.__name #这种方式是在类的内部,所以我们可以通过.__name的方式获得该属性 def set_name(self,name):
if len(name) > 1 :
self.__name = name
else:
print("name的长度必须要大于1个长度") def get_age(self):
return self.__age def set_age(self, age):
if age > 0 and age < 150:
self.__age = age
else:
print("输入的年龄必须要大于0,小于150岁") two = Student1('wsx',18,'男') two.set_name('a') # 通过自己设置接口,可以有效规避脏数据
print(two.get_name()) # 通过接口获取数据 two.set_age(20) # 通过自己设置接口,可以有效规避脏数据
print(two.get_age()) # 通过接口获取数据
'''
这样我们就自定义了自己属性的接口,它的好处在于:规避脏数据
问题:使用接口设置获取数据 和 使用点方法(one.name = 18 或者print(one.name))设置数据相比,
点方法使用更方便,我们有什么方法达到 既能使用点方法,同时又能让点方法直接调用到我们的接口了?
'''
class Student2(object): def __init__(self,name,age,sex):
self.__name = name
self.__age = age
self.__sex = sex @property
def name(self):
return self.__name @name.setter
def name(self,name):
if len(name) > 1 :
self.__name = name
else:
print("name的长度必须要大于1个长度") @property
def age(self):
return self.__age @age.setter
def age(self, age):
if age > 0 and age < 150:
self.__age = age
else:
print("输入的年龄必须要大于0,小于150岁") three = Student2('wsx',18,'男') three.name = 'ly'
print(three.name) three.age = 170
print(three.age) '''
@property:装饰器:负责把一个方法变成属性来调用
@属性名.setter:要把一个方法变成属性,只需要在get方法上加上@property,此时@property自身又创建了另一个装饰器,@属性名.setter,用于对属性值的赋值
'''
python学习13类2之封装的更多相关文章
- Python学习:类和实例
Python学习:类和实例 本文作者: 玄魂工作室--热热的蚂蚁 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规 ...
- Python学习-day7 类 部分socket
这周还是继续关于类的学习,在面向对象的学习过程中又学习了网络编程,并且提交了编写FTP的作业. 复习一下类的相关概念和定义 类 属性 实例变量:内存中 ...
- Python学习笔记——类和对象
类和对象 1. 一个例子 # 对象 = 属性 + 方法 # Python 中的类名称约定首字母大写,而 Python 函数名首字母小写 class Turtle: #属性 color = 'green ...
- Python学习(七)面向对象 ——封装
Python 类的封装 承接上一节,学了Student类的定义及实例化,每个实例都拥有各自的name和score.现在若需要打印一个学生的成绩,可定义函数 print_score() 该函数为类外的函 ...
- python学习19类5之多态与鸭子模型
'''''''''一.多态1.Python中多态是指一类事物有多种形态.''' class Animal: def run(self): raise AttributeError('子类必须实现这个方 ...
- python学习_应用pickle模块封装和拆封数据对象
学习文件数据处理的时候了解到有pickle模块,查找官方文档学习了一些需要用到的pickle内容. 封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节 ...
- day26 python学习 对象的接口,封装,私用属性 property
# 抽象类和接口类 #** #不崇尚接口类 #python本身支持多继承,没有接口专用的语法.但是我知道接口的概念 # 接口类:# 是规范子类的一个模板,只要接口类中定义的,就应该在子类中实现# 接口 ...
- Python学习日记(二十六) 封装和几个装饰器函数
封装 广义上的封装,它其实是一种面向对象的思想,它能够保护代码;狭义上的封装是面向对象三大特性之一,能把属性和方法都藏起来不让人看见 私有属性 私有属性表示方式即在一个属性名前加上两个双下划线 cla ...
- python学习08——类
笨办法学python第42节,这节讲的是类,程序沿用上一节中一个游戏,不同的是这一节用了类的方法. 其中改动的代码主要如下 原来的最后几句用了这样的代码: ROOMS = { 'death':deat ...
随机推荐
- 微服务架构盛行的时代,你需要了解点 Spring Boot
随着互联网的高速发展,庞大的用户群体和快速的需求变化已经成为了传统架构的痛点. 在这种情况下,如何从系统架构的角度出发,构建出灵活.易扩展的系统来快速响应需求的变化,同时,随着用户量的增加,如何保证系 ...
- 新建基于STM32F103ZET6的工程-寄存器版本
1.新建空白工程 新建一个文件夹,用来存放新建的工程文件.在这个新建的文件夹下创建MDK-PRO和OUTPUT两个子文件夹.MDK-PRO文件夹用来存放工程文件:OUTPUT用来存放工程编译器后输出的 ...
- Python机器学习笔记 集成学习总结
集成学习(Ensemble learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能.它不是一种单独的机器学习算法啊,而更像是一种优 ...
- PTA | 1012 数字分类 (20分)
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和: A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n ...
- usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接
usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接 自动充提币接口开发. 可对接:商城系统,游戏APP,交易平台,网站,各类APP -实现自动充提,查询,上链等功能接 ...
- kali2016&2019的安装使用
先解释一下,为什么要说2016&2019哪,这是因为有一些测试靶机环境在2016以上的系统安装不通过,所以有时候会特意找2016的镜像来用. 一.下载镜像 1.下载镜像当然要到官方去下载了: ...
- flask-migrate的基本使用
Flask-migrate 在实际开发环境中,经常会发生数据库修改的行为.一般我们修改数据库不会手动的去修改,而是去修改orm对应的模型, 然后再把模型映射到数据库中.这时候如果有一个工具能专门做这种 ...
- python3(十四) filter
# 和map()类似,filter()也接收一个函数和一个序列. # 和map()不同的是,filter()把传入的函数依次作用于每个元素, # 然后根据返回值是True还是False决定保留还是丢弃 ...
- C语言局部数组大小与内存的栈的关系
今天有个同学问了一个问题,我居然答不上来,为什么不能开局部整型二维数组[1000][1000]?但是在数组前面加上一个static就可以了? windows下栈的大小(不是数据结构里面的栈)是2MB, ...
- 浅谈ArrayList
浅谈ArrayList 废话不多说(事实是不会说),让我们直接进入正题 首先讲一讲最基本的ArrayList的初始化,也就是我们常说的构造函数,ArrayList给我们提供了三种构造方式,我们逐个来查 ...