在类内部定义的函数无非三种用途

一:绑定到对象的方法

只要是在类内部定义的,并且没有被任何装饰器修饰过的方法,都是绑定到对象的

class Foo:

def test(self): #绑定到对象的方法

pass

def test1(): #也是绑定到对象的方法,只是对象.test1(),会把对象本身自动传给test1,因test1没有参数所以会抛出异常

pass

绑定到对象,指的是:就给对象去用,

使用方式:对象.对象的绑定方法(),不用为self传值

特性:调用时会把对象本身当做第一个参数传给对象的绑定方法

二:绑定到类的方法:classmethod

在类内部定义的,并且被装饰器@classmethod修饰过的方法,都是绑定到类的

class Foo:

def test(self): #绑定到对象的方法

pass

def test1(): #也是绑定到对象的方法,只是对象.test1(),会把对象本身自动传给test1,因test1没有参数所以会抛出异常

pass

绑定到对象,指的是:就给对象去用,

使用方式:对象.对象的绑定方法()

特性:调用时会把对象本身当做第一个参数传给对象的绑定方法

三:解除绑定的方法:staticmethod

既不与类绑定,也不与对象绑定,不与任何事物绑定

绑定的特性:自动传值(绑定到类的就是自动传类,绑定到对象的就自动传对象)

解除绑定的特性:不管是类还是对象来调用,都没有自动传值这么一说了

所以说staticmethod就是相当于一个普通的工具包

class Foo:

def test1(self):

pass

def test2():

pass

@classmethod

def test3(cls):

pass

@classmethod

def test4():

pass

@staticmethod

def test5():

pass

test1与test2都是绑定到对象方法:调用时就是操作对象本身

test3与test4都是绑定到类的方法:调用时就是操作类本身

>

>

test5是不与任何事物绑定的:就是一个工具包,谁来都可以用,没说专门操作谁这么一说

四.什么是property,如何定义,如何使用,给谁用,什么情况下应该将一个属性定义成property,有什么好处?

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

为什么要用property:将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则

封装概念:

property代码1

importmathclassCircle:def __init__(self,radius): #圆的半径

self.radius=radius

@property#添加装饰器,area=property(area)

defarea(self):return math.pi * self.radius**2 #计算面积

@property#添加装饰器,perimeter=property(perimeter)

defperimeter(self):return 2*math.pi*self.radius #计算周长

c=Circle(7)

c.radius=10

print(c.radius) #打印出圆的半径#print(c.area()) #会报错,TypeError: 'float' object is not callable,译为:float对象是不可调用的#print(c.perimeter()) #float对象是不可调用的

print(c.area) #表面上是一个数据属性,但这个根本上是一个函数属性,会调用上面的area函数,打印圆的面积

print(c.perimeter) #打印圆的周长

代码片段1

property代码2

classPeople:def __init__(self,name,age,height,weight):

self.name=name

self.age=age

self.height=height

self.weight=weight

@property#该装饰器可以理解为bodyindex=property(bodyindex)

def bodyindex(self): #计算体脂

return self.weight/(self.height**2)

p1=People('cobila',18,1.65,75)print(p1.bodyindex) #过轻:低于18.5,正常:18.5-23.9,过重:24-27,肥胖:28-32,非常肥胖, 高于32

p1.weight=200

print(p1.bodyindex)

代码片段2

property代码3

classPeople:def __init__(self,name):

self.__name=name #self.__name

#def tell_name(self):

#return self.__name

@propertydefname(self):return self.__namep1=People('cobila')#print(p1.tell_name())

print(p1.name) #触发name()函数的运行#p1.name='egon' #会报错,AttributeError: can't set attribute

代码片段3

property代码4

classPeople:def __init__(self,name,SEX):

self.name=name

self.__sex=SEX #self.sex='male' p1.sex(相当于self.sex)='male'

@property #查

defsex(self):return self.__sex #p1.__sex

@sex.setter #修改

def sex(self,value): #性别是字符串类型

#print(self,value) #

if not isinstance(value,str): #python没有类型限制,所以只能自己加这种类型限制

raise TypeError("性别必须是字符串类型")

self.__sex=value #p1.__sex='male'

@sex.deleter #删除

defsex(self):del self.__sex #触发delete函数的运行,del p1.__sex

#del self.sex #这是错误的#p1=People('cobila','male')#print(p1.sex)#p1.sex='123'#p1.sex = 'female' #这个等式触发def sex(self,value)的运行,把female这个值传给value#print(p1.sex) #输出female#p1.sex=9999999 #由于更改的不是字符串类型,所以会抛出异常#p1=People('cobila',9999999999999999) #这里更改的是def sex(self):下面的self.__sex

p1=People('cobila','male') #实例化触发__init__的运行

print(p1.sex) #输出male#del p1.sex #@sex.deleter一执行它(def sex(self)),del self.sex,无限递归,一直删除自己,会报错(RecursionError: maximum recursion depth exceeded)#print(p1.sex)

代码片段4

python封装函数入门_python基础之封装相关推荐

  1. python write函数换行_Python基础知识(三)

    本章小结 学习越往后越意识到总结的重要性 特别是语法基础,东西太多 不用是真的会直接忘掉 我在总结本文的时候就发现 我当时觉得学得很好很扎实 自信不会忘记的东西, 真的已经被我忘掉了 还不得不依靠百度 ...

  2. python怎样算入门_Python基础练习之计算提成

    在刚刚发布的2018年10月TIOBE编程语言排行榜中,Python位居四位,但与排名第三的C++只有0.44%的微弱差距,由此也可见Python的受欢迎程度.眼看人工智能时代到来,Python作为主 ...

  3. python open函数编码_Python基础学习——编码与读写

    编码与读写 编码,即将人类语言转换为计算机语言,就是[编码]encode():反之,就是[解码]decode().它们的用法如下图所表示: 将人类语言编码后得到的结果,有一个相同之处,就是最前面都有一 ...

  4. python入门之函数调用-python之函数入门

    python之函数入门 一. 什么是函数 二. 函数定义, 函数名, 函数体以及函数的调用 三. 函数的返回值 四. 函数的参数 五.函数名->第一类对象 六.闭包 一,什么是函数 函数: 对代 ...

  5. python中非可选参数_python基础教程函数参数

    python里有很多的内置函数给我们的工作带来了很多发便利,在我们实现某些功能或者优化代码的时候,可以自己定义一个函数,同时我们在定义一个类的时候也会用到函数的一些知识去构造一个方法,这里就涉及到一些 ...

  6. python规定的函数头部_Python基础手册23——函数的调用

    三.函数的调用 Python 语言中调用函数与在其它高级语言中一样, 函数名加上函数运算符(一对小括号). 括号之间是所有可选的参数. 即使一个参数也没有, 小括号也不能省略.函数在调用之前必须先定义 ...

  7. python主函数入口_Python 入口函数(菜鸟入门)

    Python 入口函数(菜鸟入门) 最近在组内研究专项项目,其中的一个现有工具是用 Python 开发的,我的目标是对这款工具的流程进行优化.虽然可以找到对应的开发者了解现有流程,然后结合我的研究提出 ...

  8. python中symbols函数用法_Python基础之函数用法实例详解

    本文以实例形式较为详细的讲述了Python函数的用法,对于初学Python的朋友有不错的借鉴价值.分享给大家供大家参考之用.具体分析如下: 通常来说,Python的函数是由一个新的语句编写,即def, ...

  9. middles在python中什么意思_Python 基础知识入门(2)

    字符串格式化 Python字符串格式化有两种方式:百分号方式.format方式: 百分号的方式相对比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并在: 一.百分号方式 %[ ...

  10. python笔记小白入门_Python 笔记:全网最详细最小白的Class类和实例详解

    面向对象最重要的概念就是类(class)和实例(instance),类是抽象,而实例(Instance)则是一个个具体的对象 面向对象三大特点:封装.继承和多态 class Animal(object ...

最新文章

  1. jmh气象传真图网站_在冬奥滑雪场,他凭着气象信息,念好一本生意经
  2. VTK修炼之道42:频域处理_高通滤波(理想+巴特沃兹)
  3. 6月国产网络游戏审批信息公布 共计86款游戏过审
  4. 美团外卖回应佣金争议;苹果回应戴口罩解锁 iPhone;新 Edge 浏览器明年将不再支持 Win7 | 极客头条...
  5. Thunderspy: 7个硬件漏洞,影响9年来所有安装 Thunderbolt 的电脑
  6. 如何使用CORS解决跨域问题
  7. android应用程序开发另解及Android SDK工具集的另类用法 .
  8. linux msgctl清除缓存,linux消息队列
  9. 百度富文本编辑器 设置图片的显示大小
  10. 每日简报 5月2日简报新鲜事 每天一分钟 了解新鲜事
  11. S3cmd命令行工具使用
  12. 小红拿到了一个数组,她想取一些数使得取的数之和尽可能大,但要求这个和必须是 k 的倍数。你能帮帮她吗?
  13. 进行CAD图纸文件查看时如何对其进行平移?
  14. 一名中专生的坎坷程序人生(上)
  15. Chicken Soup 【阻碍你成长的最大敌人竟然是它-无意识】
  16. 图解 JavaScript 对象
  17. 计算机选择开机账户,Windows开机显示Administrator帐户的方法
  18. JAVA五子棋单机版
  19. 服务助手NSSM——将Windows程序封装成服务
  20. 转载唐凤的博客 :: Perl 6 十周年慶

热门文章

  1. 为什么要使用class.forname在DriverManager.getConnection之前
  2. 解决GBK字符转UTF-8乱码问题
  3. WSS3 Elevation of Privilege 替代 用户身份模拟Impersonate 进行权限提升
  4. Django index_together设置
  5. 四种插入数据的MySQL语句比较
  6. 解决ant编译中出现“includeantruntime was not set”警告的问题
  7. iOS开发技巧:使用Objective-C创建UUID
  8. Ehcache 整合Spring 使用页面、对象缓存(转)
  9. 解决安装多个Xcode出现的PBXProjectWizardChooserWizard问题
  10. 倒计时的js实现 倒计时 js Jquery