class Test_len():def __len__(self):  #这个方法可以使实例化后的对象被len()使用并返回自己想要的长度return 100
t = Test_len()
print(len(t))
'''
访问限制:私有属性,私有方法,类属性,实例属性,
双下划线意思是私有变量/私有属性,只有类对象自己可以访问。
'''
class Student():shcool = 'beijingdaxue'def __init__(self,name,score,age):self.name = name   #这个叫实例属性 也是普通属性self.__score = score  #这就是私有属性self._age = agedef getscore(self):print(self.__score)def __getage(self):  #私有方法print(self._age)def getage(self):self.__getage()s = Student('张三',99,24)
print(s.name)  #这是一个普通属性,可以随意查看并修改
# s.__score #这个时候就会报一个错误
s.getscore()
# print(s._age)  #发现实例对象依然可以访问
# s.__getage()
s.getage()
print(s.shcool)  #如果实例找不到实例属性时,就会去找类实型调用'''
__slots__ 方法的使用
一般情况下我们可以任意的给实例添加方法和属性,但是有的时候我们想要限制允许的属性名称
这个时候就可以使用__slots__
'''
class MyStudent():pass# __slots__ = ('name','age','score')ms = MyStudent()
ms.name = '123'
print(ms.name)
# ms.talk = 'i talk'  #发现这里会报错,因为我们没有允许这个属性可以被添加
# print(ms.talk)def set_age(self,age):self.age = ageprint(self.age)
#动态给类添加方法
ms.set_age = set_age
ms.set_age(ms,25)  #这里返回的是实例本身'''
@property 的使用
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:
这显然不合逻辑。为了限制score的范围,可以通过一个set_score()方法来设置成绩,
再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数:
'''class Shcool():def get_score(self):return self._scoredef set_score(self, value):if not isinstance(value, int):raise ValueError('score must be an integer!')if value < 0 or value > 100:raise ValueError('score must between 0 ~ 100!')self._score = value
ss = Shcool()
ss.set_score(66)
print(ss.get_score())'''
更简单的方法就是使用@property  也被称为静态属性
@property的实现比较复杂,我们先考察如何使用。把一个getter方法变成属性,
只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,
'''class TwoStudent(object):@propertydef score(self):return self._score@score.setterdef score(self, value):if not isinstance(value, int):raise ValueError('score must be an integer!')if value < 0 or value > 100:raise ValueError('score must between 0 ~ 100!')self._score = value@propertydef birth(self):return self._birth@birth.setterdef birth(self, value):self._birth = value@propertydef age(self):return 2015 - self._birth@propertydef width(self):return self.__width@width.setterdef width(self,width):self.__width = width@propertydef height(self):return self.__height@height.setterdef height(self, height):self.__height = height@propertydef resolution(self):return self.__width * self.__heightts = TwoStudent()
ts.score = 83
print(ts.score)ts.birth = 1995
print(ts.birth)
print(ts.age)
# ts.age = 10  #这个时候就发现age已经不可以被修改了,这里就隐藏了age属性,使得外部无法随意修改agets.width = 1024
ts.height = 768
print(ts.resolution)

Python面向对象@property用法相关推荐

  1. python的property用法_在python中property怎样使用-百度经验

    在python中property可以使类中的方法变为类中的属性一样来使用,使得类中的属性值不易暴露,更加安全,那么在python中property怎样使用呢?下面小编就带大家来看看详细的教程! 工具/ ...

  2. python类高级用法_十.python面向对象高级用法

    1.反射 1.1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的 ...

  3. python的property用法_python @property的用法及含义全面解析

    在接触python时最开始接触的代码,取长方形的长和宽,定义一个长方形类,然后设置长方形的长宽属性,通过实例化的方式调用长和宽,像如下代码一样. class Rectangle(object): de ...

  4. python的property用法_Python 中@property的用法

    class Person(object): def init(self, name, age): self.__name = name self.__age = age def get_age_fun ...

  5. Python进阶-----property用法(实现了get,set,delete三种方法)

    一.可以利用property对静态属性的进行修改操作,包括设置和删除属性 1.调用静态属性===>在静态属性函数前先用@property: 2.设置静态属性===>在静态属性函数前加上@静 ...

  6. python的property用法_Python的@property使用方法详解

    1. 作用 将类方法转换为类属性,可以用 . 直接获取属性值或者对属性进行赋值 2.实现方式 使用property类来实现,也可以使用property装饰器实现,二者本质是一样的.多数情况下用装饰器实 ...

  7. python中property函数_python 邮件表格Python中property函数用法实例分析

    本文实例讲述了Python中property函数用法.分享给大家供大家参考,具体如下: 通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道.但 ...

  8. python面向对象三大特性_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  9. python装饰器 property_介绍Python的@property装饰器的用法

    在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...

  10. Python零基础速成班-第10讲-Python面向对象编程(下),Property属性、特殊方法、设计模式、链表应用

    Python零基础速成班-第10讲-Python面向对象编程(下),Property属性.特殊方法.设计模式.链表应用 学习目标 面向对象编程 接上一讲:Property属性.特殊方法.设计模式 面向 ...

最新文章

  1. JAVA中获取当前系统时间
  2. 一篇值得收藏的正则表达式文章
  3. Android测试原理(三)——使用Eclipse的ADT进行测试
  4. iOS SDK:iOS调试技巧
  5. Blockchain Meeting supporting papers
  6. matlab求解复杂复数方程,用matlab求解一个两重积分方程(未知数在积分下限,含复数积分)...
  7. 时间序列研(part7)--单位根检验
  8. python语言变量随时声明_2. Go语言五种变量创建的方法
  9. read/fread write/fwrite 的区别
  10. 求一个正整数是哪几个正整数相加的和,这些数不能相同
  11. canvas绘制图形
  12. python画太极八卦图_太极八卦图的正确画法
  13. 分布式系统关注点(20)——阻塞与非阻塞有什么区别?
  14. 用 Access+Outlook 来采集信息
  15. iOS开发NSDecimalNumber的基本使用,加、减、乘、除、指数、比较
  16. oracle罗马字符转数字,一些关于罗马字符的知识
  17. 软考知识点笔记之----信息系统特点
  18. xml方式导出word优缺点:
  19. 了解---研究生发表论文的级别分类
  20. ioca0中断 pic单片机_PIC单片机

热门文章

  1. Anomaly Detection with Partially Observed Anomalies译文
  2. python怎么用sin_python怎么打sin
  3. nuc8i7beh安装linux随机重启,指南:nuc8i5beh安装黑苹果的教程,接近完美运行
  4. java钢铁之心,洛克人 Dash 2 EPISODE 2(第二部) - 巨大的遗产[日]下载
  5. C语言经典面试题10道(七)
  6. python高清图片合成_Python用PIL合成图片
  7. Float类型出现舍入误差的原因
  8. Kali BeEF MSF的使用
  9. 屏幕缩放和注释工具(ZoomIt)
  10. 二进制炸弹--拆弹实验