Python之面向对象方法

  property的用法:

    property属于类的封装的范畴

    property是一种特殊的属性,访问它时会执行一段功能(函数),然后返回值。

    用property的方法,就可以实现用property作为装饰器,来直接用被装饰的函数里的数据。

    而不用再繁琐的去用 "__" 的方法去调用。

  1. import math
  2. class Circle:
  3. def __init__(self,radius): #圆的半径radius
  4. self.radius=radius
  5.  
  6. @property #area=property(area)
  7. def area(self):
  8. return math.pi * self.radius**2 #计算面积
  9.  
  10. @property
  11. def perimeter(self):
  12. return 2*math.pi*self.radius #计算周长
  13.  
  14. c=Circle(7)
  15. print(c.radius)
  16. c.radius=10
  17.  
  18. # print(c.area())
  19. # print(c.perimeter())
  20. print(c.area)
  21. print(c.perimeter)
  1. class People:
  2. def __init__(self,name,age,height,weight):
  3. self.name=name
  4. self.age=age
  5. self.height=height
  6. self.weight=weight
  7. @property
  8. def bodyindex(self):
  9. return self.weight/(self.height**2)
  10.  
  11. # p1=People('cobila',38,1.65,74)
  12. # print(p1.bodyindex)
  13. # p1.weight=200
  14. # print(p1.bodyindex)
  1. #被property装饰的属性会优先于对象的属性被使用
  2.  
  3. #而被propery装饰的属性,如sex,分成三种:
  4. # 1.property
  5. # 2.sex.setter
  6. # 3.sex.deleter
  7.  
  8. #
  9. # class People:
  10. # def __init__(self,name,SEX):
  11. # self.name=name
  12. # # self.__sex=SEX
  13. # self.sex=SEX #self.sex='male' p1.sex='male'
  14. # @property
  15. # def sex(self):
  16. # return self.__sex #p1.__sex
  17. #
  18. # @sex.setter
  19. # def sex(self,value):
  20. # # print(self,value)
  21. # if not isinstance(value,str):
  22. # raise TypeError('性别必须是字符串类型')
  23. # self.__sex=value #p1.__sex='male'
  24. # @sex.deleter
  25. # def sex(self):
  26. # del self.__sex #del p1.__sex
  27.  
  28. # p1=People('cobila','male')
  29. # print(p1.tell_name())
  30. #
  31. # print(p1.sex)
  32. # p1.sex='123'
  33.  
  34. # p1.sex='female'
  35. # print(p1.sex)
  36.  
  37. # p1.sex=123123123123123123123123123213
  38.  
  39. # p1=People('cobila',123123123123123)
  40. # p1=People('cobila','male')
  41. # print(p1.sex)
  42. # del p1.sex #del self.sex
  43. # print(p1.sex)
  44.  
  45. class People:
  46. def __init__(self,name,SEX):
  47. self.name=name
  48. # self.__sex=SEX
  49. self.sex=SEX#p1.sex='male'
  50.  
  51. @property
  52. def sex(self):
  53. print('------proerty---------------------->')
  54. return self.__sex
  55.  
  56. @sex.setter
  57. def sex(self,value):
  58. print('===================》')
  59. # print(self,value)
  60. # if not isinstance(value,str):
  61. # raise TypeError('性别必须是字符串类型')
  62. self.__sex=value #p1.ABCDEFG='male'
  63. @sex.deleter
  64. def sex(self):
  65. print('delete 操作')
  66. del self.__sex
  67.  
  68. p1=People('George','male')
  69. # print(p1.__dict__)
  70. # print(p1.sex)
  71. # del p1.sex
  72. # print(p1.sex)
  73.  
  74. # print(p1.ABCDEFG)
  75. # p1.ABCDEFG=123123
  76. # print(p1.ABCDEFG)
  77.  
  78. # p1.sex
  79. # print(p1.__dict__)
  80.  
  81. # p1.sex
  82.  
  83. # p1.sex='mall'
  84.  
  85. # del p1.sex

  staticmethod的用法:

     应用场景:

      

  1. # class Foo:
  2. # def spam(self):
  3. # print('----->',self)
  4. #
  5. #
  6. # # Foo.spam(123123)
  7. #
  8. # f1=Foo()
  9. # f1.spam()
  10.  
  11. # class Foo:
  12. # @staticmethod
  13. # def spam(x,y,z):
  14. # print(x,y,z)
  15. #
  16. #
  17. # # Foo.spam(1,2,3)
  18. # f2=Foo()
  19. # f2.spam(1,2,3)
  20.  
  21. import time
  22. class Date:
  23. def __init__(self,year,month,day):
  24. self.year=year
  25. self.month=month
  26. self.day=day
  27. #
  28. # def test():
  29. # print('from test')
  30. #
  31. @staticmethod
  32. def now(): #用Date.now()的形式去产生实例,该实例用的是当前时间
  33. t=time.localtime() #获取结构化的时间格式
  34. obj=Date(t.tm_year,t.tm_mon,t.tm_mday) #新建实例并且返回
  35. return obj
  36.  
  37. @staticmethod
  38. def tomorrow():#用Date.tomorrow()的形式去产生实例,该实例用的是明天的时间
  39. t=time.localtime(time.time()+86400)
  40. return Date(t.tm_year,t.tm_mon,t.tm_mday)
  41. # d1=Date(2017,1,13)
  42. # # Date.test()
  43. # print(d1.test)
  44. # d1.test()
  45.  
  46. # d1=Date(2017,1,13)
  47. # d2=Date(2017,1,14)
  48. # date_now=Date.now()
  49. # print(date_now)
  50. # print(date_now.year)
  51. # print(date_now.month)
  52. # print(date_now.day)
  53.  
  54. # d1=Date.now()
  55. # print(d1.year,d1.month,d1.day)
  56. #
  57. # d2=Date.tomorrow()
  58. # print(d2.day)
  59.  
  60. #但凡是定义在类的内部,并且没有被任何装饰器修饰过的方法,都是绑定方法:有自动传值功能
  61. d1=Date(1212,22,22)
  62. print(d1.now)
  63. print(Date.now)
  64. # d1.now() #now(d1)
  65.  
  66. #但凡是定义在类的内部,并且被staticmethod装饰器修饰过的方法,都是解除绑定的方法,实际上就函数:就没有自动传值功能了
  67. d_n1=Date.now()
  68. d_n2=d1.now()
  69. print(d_n1.year,d_n1.month,d_n1.day)
  70. print(d_n2.year,d_n2.month,d_n2.day)

  

  classmethod的用法:

  1. #把一个方法绑定给类:类.绑定到类的方法(),会把类本身当做第一个参数自动传给绑定到类的方法
  1. #拿掉一个类的内存地址后,就可以实例化或者引用类的属性了
  1. class Foo:
  2. def bar(self):
  3. pass
  4. @classmethod #把一个方法绑定给类:类.绑定到类的方法(),会把类本身当做第一个参数自动传给绑定到类的方法
  5. def test(cls,x):
  6. print(cls,x) #拿掉一个类的内存地址后,就可以实例化或者引用类的属性了
  7.  
  8. # print(Foo.bar)
  9. # print(Foo.test)
  10.  
  11. Foo.test(123123)
  12.  
  13. f=Foo()
  14. print(f.bar)
  15. print(f.test)
  16. print(Foo.test)
  17. f.test(1111)
  1. import time
  2. class Date:
  3. def __init__(self,year,month,day):
  4. self.year=year
  5. self.month=month
  6. self.day=day
  7. #
  8. # def test():
  9. # print('from test')
  10. #
  11. @classmethod
  12. def now(cls): #用Date.now()的形式去产生实例,该实例用的是当前时间
  13. print(cls)
  14. t=time.localtime() #获取结构化的时间格式
  15. obj=cls(t.tm_year,t.tm_mon,t.tm_mday) #新建实例并且返回
  16. return obj
  17.  
  18. @classmethod
  19. def tomorrow(cls):#用Date.tomorrow()的形式去产生实例,该实例用的是明天的时间
  20. t=time.localtime(time.time()+86400)
  21. return cls(t.tm_year,t.tm_mon,t.tm_mday)
  22.  
  23. class EuroDate(Date):
  24. def __str__(self):
  25. return '年:%s,月:%s,日:%s' %(self.year,self.month,self.day)
  26.  
  27. # e1=EuroDate.now()
  28. # print(e1)
  29.  
  30. e1=EuroDate(1,1,1)
  31. print(e1)

  __str__ 的用法:

  1. #__str__定义在类内部,必须返回一个字符串类型,
    #什么时候会出发它的执行呢?打印由这个类产生的对象时,会触发执行
       
  1. #__str__定义在类内部,必须返回一个字符串类型,
  2. #什么时候会出发它的执行呢?打印由这个类产生的对象时,会触发执行
  3.  
  4. class People:
  5. def __init__(self,name,age):
  6. self.name=name
  7. self.age=age
  8. def __str__(self):
  9. return '<name:%s,age:%s>' %(self.name,self.age)
  10.  
  11. p1=People('George',18)
  12. print(p1)
  13. str(p1) #----->p1.__str__()

  链接:详细

Python之面向对象方法的更多相关文章

  1. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  2. python类及其方法

    python类及其方法 一.介绍 在 Python 中,面向对象编程主要有两个主题,就是类和类实例类与实例:类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中 ...

  3. Python的面向对象3

    接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...

  4. Python的面向对象2

    我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...

  5. Python的面向对象1

    今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++  ,Java  ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...

  6. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  7. Python之面向对象一

    引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...

  8. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  9. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

随机推荐

  1. 查找MySQL和 SQL sever data

    MySql SQL server

  2. 用Python解析HTML,BeautifulSoup使用简介

    Beautiful Soup,字面意思是美好的汤,是一个用于解析HTML文件的Python库.主页在http://www.crummy.com/software/BeautifulSoup/ , 下载 ...

  3. NDK(10)Android.mk各属性简介,Android.mk 常用模板--未完

    参考 : http://blog.csdn.net/hudashi/article/details/7059006 1. Android.mk简介 Android.mk文件是GNU Makefile的 ...

  4. Struts2 第三个程序 namespacce的用法

    1.创建web项目,添加struts2支持的类库,在web.xml中配置struts2过滤器. 2.创建名为UserAction的Action对象,并分别在其中编写add()和update()方法,用 ...

  5. Windows 7操作系统下Apache的安装与配置(图文详解)

    我这里是 Apache2.4.X-win64 首先, 我的操作系统信息如下  Apache2.4-win64的下载 官网 http://www.apachelounge.com/download/ 因 ...

  6. String的用法——转换功能

    package cn.itcast_05; /* String类的转换功能: byte[] getByte():把字符串转换成字节数组 复习: public String(byte[] bytes): ...

  7. 12 DOM操作应用

    1.创建子元素oLi=document.creatElement('li') 2.将元素附给父级元素oUl.appendChild(oLi) 3.将元素插入到父级元素里的第一位子元素之前oUl.ins ...

  8. iOS programming UITabBarController

    iOS programming UITabBarController 1.1 View controllers become more interesting when the user's acti ...

  9. sql server 强制关闭连接

    USE master; GO DECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) FROM ma ...

  10. CLUSTER - 根据一个索引对某个表集簇

    SYNOPSIS CLUSTER indexname ON tablename CLUSTER tablename CLUSTER DESCRIPTION 描述 CLUSTER 指示PostgreSQ ...