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

最新文章

  1. Win10商店东方财富网 UWP版更新,支持平板,PC,手机
  2. 搭建域服务器和DNS
  3. SIP模块版本错误问题:the sip module implements API v??? but XXX module requires API v???
  4. MySql开始日期、结束日期查询
  5. c#多线程生产者消费者(手稿)
  6. P1017 进制转换
  7. 条款5:了解C++提供的默认函数
  8. C++工具系列博文合集
  9. 阅读《RobHess的SIFT源码分析:综述》笔记2
  10. eclipse设置项目发布到tomcat webaap下
  11. 最常用的CSS技巧收集笔记
  12. MVC Razor 一些常用的方法
  13. 全面理解SSD和NAND Flash
  14. [转] Android开发之如何保证Service不被杀掉(broadcast+system/app)
  15. Java第5次
  16. Jquery 验证 validate
  17. 自由是有代价的:聊聊这几年尝试的道路 要想生活好,别看哲学书和思想书。简单看看可以,看多了问题就大了。还是要去研究研究些具体的问题。别jb坐在屋子里,嘴里念着海子的诗,脑袋里想康德想的事情,兜里屁都没有,幻想自己是大国总理,去想影帝是怎么炼成的。
  18. Elasticsearch在centos6中的安装
  19. android学习-进程/线程管理-完整
  20. RTX——第13章 事件标志组

热门文章

  1. Synergy 使用方法备忘
  2. ACM程序设计选修课——1065: Operations on Grids(暴力字符串)
  3. wifi hand
  4. bzoj 4566 [Haoi2016]找相同字符SA
  5. 进程与multiprocessing模块
  6. javaweb学习总结(十四)——JSP原理(转)
  7. es6总结(九)--Iterator & for of
  8. 标准C程序设计七---40
  9. (1)sqlite基础
  10. BZOJ——1601: [Usaco2008 Oct]灌水