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. 德国最受欢迎的程序员技能排行
  2. php计划任务每天12点执行一次,php定时执行计划任务之直接在php中执行
  3. 学python好找工作嘛-Python开发学完好找工作吗?
  4. SVN服务器搭建和使用(二)
  5. python地图标注_Python 给定的经纬度标注在地图上的实现方法
  6. 改变 Gnome 应用程序 图标 大小
  7. 细说Oracle11g RAC的IP地址
  8. win10计算机维护,关掉win10系统自动维护功能的方法【图文教程】
  9. C语言中文网C++教程笔记
  10. 基于python+django房屋租赁管理系统pycharm源码lw
  11. t/p命令的区别 cs和ds
  12. Debian10: 安装兄弟DCP-7080D打印机
  13. 利用win10自带的系统配置禁止开机启动项和程序
  14. Win10出现“你需要权限才能执行此操作”提示的解决方法--win7w.com
  15. 小菜鸟之HTML第二课
  16. TL-WR941N路由器刷DD-WRT和OPENWRT教程及使用花生壳
  17. 搭建qnx开发环境,虚拟qnx系统+虚拟win7系统+QNX Momentics IDE 4.6
  18. linux下python升级版本
  19. Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.1.1:generate
  20. 莫凡Python学习笔记 一

热门文章

  1. android 常用URI
  2. 显示前半内容后半内容用省略号_省略号前后的标点用法
  3. win7 ShuipFCMS 配置 及问题
  4. shuipFCMS二次开发记录一
  5. ios 根据日期知道周几_iOS-通过日期计算是周几
  6. java浪漫之心代码_浪漫桃心的Android表白程序
  7. 自动驾驶技术(5)视觉与激光雷达对比
  8. 09-03 NOIP模拟测试36
  9. android时间格式am pm,pm时间(am.pm正确时间书写格式)
  10. QT界面优化---反走样