python--面向对象封装
from collectoins import namedtuple
Point=namedtuple('point',['x','y'])
t1=Point(1,2)
print(t1.x)
print(t1.y)
没有方法的类属性不会发生变化
定义简单
不能改变
面向对象封装
私有属性!!!
私有方法!!!
用装饰器描述的几个方法
@property !!!
@classmethod!!
@staticmethod!
封装
class Teacher:
def __init__(self,name,pwd):
self.name=name
self.pwd=pwd
alex=Teacher('alex','')
print(alex.pwd) #这样不安全
定义一个私有属性:
self.__pwd=pwd
这样pwd就变成了私有属性
只能自己的类里面用方法用:
def func(self):
print(self.__pwd)
这样在类自己的方法里可以用
方法也可以私有化
同样
可以在实例化的时候直接调用方法,在里面self.方法()
还有私有静态属性
如果想要调用的话_类名__方法、静态属性、属性
只能在内部进行私有属性、私有方法、私有静态属性的定义
利用私有属性和私有方法进行密码加密:
class Teacher:
def __init__(self,name,__pwd):
self.name=name
self.__pwd=__pwd
def __p(self):
return hash(self.__pwd)
def oi(self,pwd):
return hash(pwd)==self.__p()
so=Teacher('alex',2222)
ret=so.oi(2221)
print(ret)
什么时候会用到私有方法
1.有一些方法只是用来作为中间结果
2.父类的方法不希望子类继承
私有属性用法例子:
class Person:
def __init__(self,height,weight):
self.__height=height
self.__weight=weight
def jisuan(self):
return self.__weight/(self.__height*self.__height)
def change(self,new,neww):
if neww >20:
self.__weight=neww
self.__height=new
else:
print('体重过轻')
jing=Person(1.70,52)
print(jing.jisuan())
jing.change(1.65,42)
@property 把一个方法伪装成属性,直接加在方法上面,调用的时候就是属性了
class Fang:
def __init__(self,name,chang,kuan):
self.name=name
self.__chang=chang
self.__kuan =kuan
@property
def get_1(self):
return self.name,self.__chang*self.__kuan
jing=Fang('jing',55,22)
print(jing.get_1)
@方法名.setter 修改函数伪装成的属性的值
def 方法名(self,zhi):
self.变量名=zhi
私有方法是不可以被子类继承的
方法@staticmethod
类里面的方法就可以不传参数了
不能将函数独立的放在类外面 完全使用面向对象编程的时候
并且这个函数完全不需要依赖对象的属性和类的属性
就可以用staticmethod装饰这个函数
静态方法:没有必须传的参数 方法不需要用对象的属性和类的属性
普通方法:必须穿一个对象 可以使用对象的属性和类的属性
类方法:必须传一个类,方法不需要使用对象的属性,但可以使用类的属性
@classmethod 里面传cls
python--面向对象封装的更多相关文章
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
- python面向对象封装案例(附:is和==的区别)
面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...
- python面向对象-封装-property-接口-抽象-鸭子类型-03
封装 什么是封装: # 将复杂的丑陋的隐私的细节隐藏到内部,对外提供简单的使用接口 或 # 对外隐藏内部实现细节,并提供访问的接口 为什么需要封装 1.为了保证关键数据的安全性 2.对外部隐藏内部的实 ...
- Python—面向对象 封装03
接着上面的一篇继续往下: 如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) class A: __x = 1 # _A__x = 1 def __init__(self, ...
- Python面向对象封装案例
01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 ...
- python面向对象封装案例2
封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 在 类 ...
- python面向对象(封装、多态、反射)
目录 面向对象之封装 @property 面向对象之多态 面向对象之反射 面向对象之封装 含义 将类中的某些名字按照特殊的书写方式"隐藏"起来,不让外界直接调用,目的是为了不然外界 ...
- python面向对象-封装and多态
python 接口类和抽象类 为什么讲封装之前要将这个东西? 我才不会说为什么 首先: python没有接口类这个概念!!!!!!!! 哈哈哈......神经病 python抽象类和接口类更接近于一种 ...
- Python面向对象----封装
1. Python语言不是强类型语言, 公有和私有体现的不是很明显.私有成员可以通过 对象._ClassName__私有成员进行访问 2. 使用封装借助了装饰器 其实具有类get和set等操作
- python 面向对象 封装
什么是封装 广义上的封装:代码的保护,面对对象的思想本身就是 只让自己的对象能调自己类的方法 狭义上的封装:将属性和方法藏起来 私有属性/私有方法 python没有真正意义的私有属性,可以通过调用实例 ...
随机推荐
- 【bzoj3307】雨天的尾巴 权值线段树合并
题目描述 N个点,形成一个树状结构.有M次发放,每次选择两个点x,y,对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最多的是哪种物品. 输入 第一行数字N,M接下来 ...
- HDU——2093考试排名(string类及其函数的运用以及istringstream)
考试排名 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- UVa——400Unix ls(字典序文本处理输出iomanip)
Unix ls Time Limit: 3000MS ...
- 字符串匹配之Sunday算法
Sunday算法不像KMP算法那么复杂,但是效率又比较高,在KMP之上,下面简单介绍Sunday算法及其实现. Sunday 算法由 Daniel M.Sunday 在 1990 年提出,它的思想跟 ...
- GridView主键列不让编辑时应该修改属性DataKeyNames
原文发布时间为:2008-08-02 -- 来源于本人的百度文章 [由搬家工具导入] 为了防止GridView主键被编辑,应该在GridView属性DataKeyNames里面写上主键
- 在js中为对象添加和删除属性
对于一个普通的js对象: var obj = { name:"mary", age:21 } 如果我们要对它添加新属性的话可以使用下列方式: obj.address = " ...
- NavBarControl(侧边导航栏)
- Codechef Eugene and big number(矩阵快速幂)
题目链接 Eugene and big number 题目转化为 $f(n) = m * f(n - 1) + a$ $f(n + 1) = m * f(n) + a$ 两式相减得 $f(n + 1) ...
- BZOJ2243 [SDOI2011]染色(树链剖分+线段树合并)
题目链接 BZOJ2243 树链剖分 $+$ 线段树 线段树每个节点维护$lc$, $rc$, $s$ $lc$代表该区间的最左端的颜色,$rc$代表该区间的最右端的颜色 $s$代表该区间的所有连续颜 ...
- netframework中等待多个子线程执行完毕并计算执行时间
本文主要描述在.netframework中(实验环境.netframework版本为4.6.1)提供两种方式等待多个子线程执行完毕. ManualResetEvent 在多线程中,将ManualRes ...