加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

史上最全Python面向对象编程

发布时间:2019-03-27 13:15:21 所属栏目:建站 来源:浪子燕青
导读:面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别。 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5. 写一个函数完成某个功能 6. 写一个函数完成某个功能 7. 写一

使用get-set-del方法操作私有成员

  1. class obj: 
  2.     def __init__(self,name): 
  3.         self.name=name 
  4.     def prin(self): 
  5.         print self.name 
  6.     __age = 18 
  7.     # 加上双下划线的就是私有变量,只能在类的内部访问,外部无法访问 
  8.     @classmethod 
  9.     # 如果要在类中调用,首先调用类方法 
  10.     def pri(cls): 
  11.         print cls.__age 
  12.         # 然后在使用 
  13.     @classmethod 
  14.     def set_age(cls,value): 
  15.         cls.__age = value 
  16.         return cls.__age 
  17.         # 这个用法就是改变__age的值 
  18.     @classmethod 
  19.     def get_age(cls): 
  20.         return cls.__age 
  21.         # 这个用法就是直接返回__age的值 
  22.     @classmethod 
  23.     def del_age(cls): 
  24.         del cls.__age 
  25.         # 这个用法就是直接删除__age的值 
  26.  
  27. print obj.get_age() 
  28. # 这里是直接调用出__age的值  返回值18 
  29. print obj.set_age(20) 
  30. # 这里是直接改变__age的值  返回值20 
  31. obj.del_age() 
  32. # 这里是直接删除__age的值 

思考: 既然是私有变量,不让外部访问,为何有要在后面调用又改变呢?因为可以对私有变量进行额外的检测,处理,加工等等。比如判断value的值,使用isinstance然后做if-else判断。

使用私有变量可以对内部变量进行保护,外部无法改变,但是可以对它进行检测处理。

这里引申一下私有成员的保护机制,使用__age对私有变量其实就是—>obj._obj__age的样子进行保护,说白了你直接使用obj._obj__age就可以直接调用内部私有变量age了。

Propety装饰器

把类的方法伪装成属性调用的方式,就是把类里面的一个函数,变成一个属性一样的东西~

一开始调用类的方法要使用圆括号,现在变成了属性进行读取设置存储。

举个例子来说明:

常用的调用方法

  1. class obj: 
  2.     def __init__(self,name,age): 
  3.         self.__name=name 
  4.         self.__age=age 
  5.         # 讲这些设置成私有变量 
  6.     def get_age(self): 
  7.         return self.__age 
  8.     def set_age(self,value): 
  9.         if isinstance(value,int): 
  10.             self.__age=value 
  11.         else: 
  12.             raise ValueError('非整数类型') 
  13.     def del_age(self): 
  14.         print 'delete over' 
  15. a = obj('langzi',18) 
  16. print a.get_age() 
  17. a.set_age(20) 
  18. print a.get_age() 

使用装饰器

  1. class obj: 
  2.     def __init__(self,name,age): 
  3.         self.__name=name 
  4.         self.__age=age 
  5.         # 把这些设置成私有变量 
  6.     @property 
  7.     def age(self): 
  8.         return self.__age 
  9.     @age.setter 
  10.     def age(self,value): 
  11.         if isinstance(value,int): 
  12.             self.__age=value 
  13.         else: 
  14.             raise ValueError('非整数类型') 
  15.     @age.deleter 
  16.     def age(self): 
  17.         print 'delete over' 
  18. a = obj('langzi',18) 
  19. # 使用这些装饰器,可以使用类与对象的方法直接调用 
  20. print a.age 
  21. # 这里就是直接调用返回age的值 
  22. a.age=20 
  23. # 这里就是直接使用setter把值转换 
  24. print a.age 
  25. del a.age 
  26. # 删除age 

当然这种调用方法有些麻烦,每次都是一个一个去实例类与对象,有个更加简单直观的方法。

更加减半的使用property()函数

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读