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--面向对象封装的更多相关文章

  1. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  2. python面向对象封装案例(附:is和==的区别)

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  3. python面向对象-封装-property-接口-抽象-鸭子类型-03

    封装 什么是封装: # 将复杂的丑陋的隐私的细节隐藏到内部,对外提供简单的使用接口 或 # 对外隐藏内部实现细节,并提供访问的接口 为什么需要封装 1.为了保证关键数据的安全性 2.对外部隐藏内部的实 ...

  4. Python—面向对象 封装03

    接着上面的一篇继续往下: 如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) class A: __x = 1 # _A__x = 1 def __init__(self, ...

  5. Python面向对象封装案例

    01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 ...

  6. python面向对象封装案例2

    封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 在 类 ...

  7. python面向对象(封装、多态、反射)

    目录 面向对象之封装 @property 面向对象之多态 面向对象之反射 面向对象之封装 含义 将类中的某些名字按照特殊的书写方式"隐藏"起来,不让外界直接调用,目的是为了不然外界 ...

  8. python面向对象-封装and多态

    python 接口类和抽象类 为什么讲封装之前要将这个东西? 我才不会说为什么 首先: python没有接口类这个概念!!!!!!!! 哈哈哈......神经病 python抽象类和接口类更接近于一种 ...

  9. Python面向对象----封装

    1. Python语言不是强类型语言, 公有和私有体现的不是很明显.私有成员可以通过 对象._ClassName__私有成员进行访问 2. 使用封装借助了装饰器 其实具有类get和set等操作

  10. python 面向对象 封装

    什么是封装 广义上的封装:代码的保护,面对对象的思想本身就是 只让自己的对象能调自己类的方法 狭义上的封装:将属性和方法藏起来 私有属性/私有方法 python没有真正意义的私有属性,可以通过调用实例 ...

随机推荐

  1. iOS--app自定义相册--给图片重写exif数据-定义相册时间戳

    1.Exif简介 可交换图像文件格式常被简称为Exif(Exchangeable image file format),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据. Exif可 ...

  2. 【bzoj2729】[HNOI2012]排队 组合数学+高精度

    题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入 ...

  3. 【Vjudge】P1989Subpalindromes(线段树)

    题目链接 水题一道,用线段树维护哈希值,脑补一下加减乱搞搞……注意细节就过了 一定注意细节…… #include<cstdio> #include<cstdlib> #incl ...

  4. [图论训练]BZOJ 3245: 最快路线【最短路】

    Description 精 明的小R每每开车出行总是喜欢走最快路线,而不是最短路线.很明显,每条道路的限速是小R需要考虑的关键问题.不过有一些限速标志丢失了,于是小R将不知 道能开多快.不过有一个合理 ...

  5. 关闭webkit浏览器的自动完成,修正,大写

    关闭input自动完成<input name="q" type="text" autocomplete="off"/>关闭整个表 ...

  6. 【CCF】网络延时 树搜索

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  7. HDU 2594 kmp算法变形

    Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  8. SPOJ CIRU The area of the union of circles

    You are given N circles and expected to calculate the area of the union of the circles ! Input The f ...

  9. 使用C语言和i2c-dev驱动

    原文地址:blog.csdn.NET/wyt2013/article/details/20740659 感谢作者分享. 在本博客的<使用Beaglebone Black的I2C(一)>中, ...

  10. PhpStorm配置svn:Can't use Subversion command line client:svn

    Can't use Subversion command line client:svn 感谢: 萌芽的绿豆的文章:https://www.cnblogs.com/yuanchaoyong/p/616 ...