python 面向对象之class和封装
作者:cyr001 发布时间:2021-10-01 18:01:21
标签:python,面向对象,class,封装
# 封装
# Python并没有真正的私有化支持,但可用下划线得到伪私有 访问私有变量:实例._类名__变量名 访问私有方法:实例._类名__方法名()
class Wife02():
def __init__(self,name,age,sex): # 负责对象的初始化
self.set_name(name)
self.set_age(age)
self.set_sex(sex)
def set_name(self,value):
if isinstance(value,str): # 数据类型是否是字符串
if '\u4e00' <= value <= '\u9fff': # 是否是正文
self.__name = value
else:
raise ValueError("不是中国人") # 抛出异常
else:
raise ValueError("数据类型错误")
def set_age(self,value):
if 18 <= value <= 100:
self.__age = value # 私有化实例变量:在变量名称前,加入双下划线。
else:
raise ValueError("年龄不符,请重新创建对象")
def set_sex(self,value):
if value == "女":
self.__sex = value
else:
raise ValueError("性别错误")
def get_name(self):
return self.__name # 返回私有变量的值
def get_age(self):
return self.__age
def get_sex(self):
return self.__sex
# w01 = Wife02("zs",20,"女") # ValueError: 不是中国人
# w02 = Wife02("张三",8,"女") # ValueError: 年龄不符,请重新创建对象
# w03 = Wife02("张三",8,"男") # ValueError: 年龄不符,请重新创建对象
w04 = Wife02("张三",20,"女")
print(w04._Wife02__age) # 访问私有变量
print(w04.get_age()) # 访问私有变量
print(w04.__dict__) # {'_Wife02__name': '张三', '_Wife02__age': 20, '_Wife02__sex': '女'}
w04.set_age(30) # 修改私有变量的值
print(w04.__dict__) # {'_Wife02__name': '张三', '_Wife02__age': 30, '_Wife02__sex': '女'}
w04.sex = "男" # 增加非私有化属性
print(w04.__dict__) # {'_Wife02__name': '张三', '_Wife02__age': 30, '_Wife02__sex': '女', 'sex': '男'}
class Wife03():
# 类的设计者,限制该类对象只能有如下的实例变量
__slots__ = ("__age","sex") # 该类只有这两个属性
def __init__(self,age,sex = ""):
self.age = age # 属性
self.sex = sex # 实例变量
@property # 负责age属性的读取操作 装饰器
def age(self):
return self.__age
@age.setter # 负责age属性的写入操作
def age(self,value):
if 18 <= value <= 100:
self.__age = value # 私有化实例变量:在变量名称前,加入双下划线。
else:
raise ValueError("年龄不符,请重新创建对象")
w05 = Wife03(30) # 调用的@age.setter下函数
print(w05.age) # 调用的@property下函数
w05 = Wife03(20) # 调用的@age.setter下函数
print(w05.age) # 调用的@property下函数
# print(w05.__dict__) # 报错 当定义了__slots__属性之后,Python对象将不再拥有__dict__属性和__weakref__属性
print(w05.__slots__) # ('__age', 'sex')
print(w05._Wife03__age)
print(dir(w05)) # 属性列表['_Wife03__age', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', 'age', 'sex']
# 核心思想:分而治之 封装变化
class Person:
def __init__(self, name):
self.name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
self.__name = value
def go_home(self, car):
print(self.name, end="")
car.run("家")
class Car:
def run(self, pos):
print("移动到" + pos)
zs = Person("张三")
car = Car()
zs.go_home(car)
来源:https://blog.csdn.net/qq_45392913/article/details/121894790
0
投稿
猜你喜欢
- 今天在写一个linux下自动备份指定目录下的所有目录的脚本时,遇到了一个问题,由于我是需要备份目录,所以,需要判断扫描的文件是否为目录,当我
- 利用百度 AI 开发平台的 OCR 文字识别 API 识别并提取图片中的文字。首先需注册获取 API 调用的 ID 和 key,步骤如下:打
- import timedef block(file,size=65536): while True:&n
- 目录图像边框的实现图像边框设计的主要函数图像混合的实现图像混合实现的主要函数主要思路图像边框的实现图像边框设计的主要函数cv.copyMak
- 什么是 Goroutinegoroutine 是 Go 并行设计的核心。goroutine 说到底其实就是协程,它比线程更小,十几个 gor
- 如果我们的web应用有大量的异步请求,而这些异步请求是在web服务器认证的情况下,那当我们请求发生在服务器认证失效下,服务器自动302到登录
- 很多时候,我们都在说设计需要引导用户,尤其是在对初级用户的引导上,很大程度决定着产品能否快速聚拢用户的可能;但同样很多时候,用户并不需要引导
- zip文件是我们经常使用的打包格式之一,python解压和压缩zip效率非凡。 python解压zip文档:#/usr/bin/python
- 因为最近要经常转换数据集进行实验,因此记录一下。1、视频转图片即为将视频解析为一帧一帧的图片:import cv2vc=cv2.VideoC
- 10个杀手级应用的Python自动化脚本重复的任务总是耗费时间和枯燥的。想象一下,逐一裁剪100张照片,或者做诸如Fetching APIs
- 1. 原始网站https://www.rbsp-ect.lanl.gov/data_pub/rbspa/2. 算法说明进入需要下载的数据所在
- 本文通过实例解析了 SQL Server 数据库扩展存储过程,实现远程备份与恢复的方法和步骤实例说明: 环境:win2k+sqlserver
- 在java的应用中,我们经常会对数据库进行必要的操作,下来我们就了解一下如何用java连接mysql数据库 以及java连接sql serv
- 用户界面和用户体验(UI/UX)是任何产品成败的关键,尤其 Web,Web 是一种公开的,可以被任何人随时随地访问的特殊产品,用户的体验几乎
- 通常来说,一个Python程序可以从键盘读取输入,也可以从文件读取输入;而程序的结果可以输出到屏幕上,也可以保存到文件中便于以后使用。本文就
- 一、数据的概括性度量1、统计学概括:统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析、总结,
- 这个是捕获键盘事件输入状态的js代码,它可以判断你敲打了键盘的那个键,ctrl、shift,26个字母等等,返回具体键盘值。Javascri
- 有这样一个要求,它要创建一个SQL Server查询,其中包括基于事件时刻的累计值。典型的例子就是一个银行账户,因为你每一次都是在不同的时间
- 在《 详解Python拼接字符串的七种方式 》这篇文章里,我提到过,字符串是程序员离不开的事情。后来,我看到了一个英文版本的说法:There
- 要将深度学习更快且更便捷地应用于新的问题中,选择一款深度学习工具是必不可少的步骤。 TensorFlow是谷歌于2015年11月9日正式开源