python类属性用法总结
属性的定义:python中的属性其实是普通方法的衍生。
操作类属性有三种方法:
1.使用@property装饰器操作类属性。
2.使用类或实例直接操作类属性(例如:obj.name,obj.age=18,del obj.age)
3.使用python内置函数操作属性。
属性存在的意义:
1、访问属性时可以制造出和访问字段完全相同的假象,属性由方法衍生而来,如果Python中没有属性,方法完全可以代替其功能。
2、定义属性可以动态获取某个属性值,属性值由属性对应的方式实现,应用更灵活。
3、可以制定自己的属性规则,用于防止他人随意修改属性值。
下面详细介绍三种操作类属性的方法:
1.使用@property装饰器操作类属性。
定义时,在普通方法的基础上添加@property装饰器;属性仅有一个self参数,调用时无需括号;
优点:
1) @property装饰器可以实现其他语言所拥有的getter,setter和deleter的功能(例如实现获取,设置,删除隐藏的属性)
2) 通过@property装饰器可以对属性的取值和赋值加以控制,提高代码的稳定性。
实例代码1:
#encoding=utf-
class Goods(): #新式类
@property
def price(self): #查看属性值
print ('@property ')
@price.setter #修改、设置属性
def price(self, value):
print ('@price.setter' )
@price.deleter #删除属性
def price(self):
print ('@price.deleter') obj = Goods()
obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
obj.price = # 自动执行 @price.setter 修饰的 price 方法,并将2000赋值给方法的参数
del obj.price # 自动执行 @price.deleter 修饰的 price 方法
结果输出:
@property
@price.setter
@price.deleter
实例代码2:通过@property装饰器对属性的取值和赋值加以控制
class Goods(object):
def __init__(self):
self.value=
@property
def price(self): # 查看属性
return self.value @price.setter # 添加或设置属性(属性名.setter)
def price(self, value):
if value >= and value<=: #对属性的取值和赋值加以控制
self.value=value
print (self.value)
else:
print ("请输入一个50到100之间的数!") @price.deleter # 删除属性(属性名.deleter) 注意:属性一旦删除,就无法设置和获取
def price(self):
del self.value
print ("price is deleted!") obj = Goods()
print (obj.price) # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
obj.price= # 自动执行 @price.setter 修饰的 price 方法,并将106 赋值给方法
del obj.price # 自动执行 @price.deleter 修饰的 price 方法
结果输出:
50
请输入一个50到100之间的数!
price is deleted!
2.使用类或实例直接操作类属性
缺点:对类的属性没有操作控制规则,容易被人修改。
#coding=utf-
class Employee (object):
#所有员工基类
empCount =
def __init__(self, name, salary) :
#类的构造函数
self.name = name
self.salary = salary
Employee.empCount +=
def displayCount(self) :
#类方法
print ("total employee ",Employee.empCount)
def displayEmployee(self) :
print ("name :",self.name , ", salary :", self.salary) #创建Employee类的实例对象
emp1 = Employee("丽丽", )
emp1.displayCount()
emp1.displayEmployee()
emp1.salary = #修改属性 salary
print (emp1.salary)
emp1.age = #添加属性 age
print (emp1.age)
del emp1.age #删除 age属性
emp1.empCount=
Employee.empCount=1000
结果:
total employee 1
name : 丽丽 , salary : 10000
20000
25
3.使用python内置函数操作属性。
1)getattr(obj, name[, default]):访问对象的属性,如果存在返回对象属性的值,否则抛出AttributeError异常。
2)hasattr(obj,name):检查是否存在某个属性,存在返回True,否则返回False。
3)setattr(obj,name,value):设置一个属性。如果属性不存在,会创建一个新属性,该函数无返回值。若存在则更新这个值。
4)delattr(obj, name):删除属性,如果属性不存在则抛出AttributeError异常,该函数也无返回值。
应用实例:
#encoding=utf-
class Employee(object):
#所有员工基类
empCount=
def __init__(self,name,age,salary):
#类的构造函数
self.name=name
self.salary=salary
self.age=age
Employee.empCount+= def displayCount(self):
#类方法
print("total employee",Employee.empCount) def displayEmployee(self):
print("name:",self.name,"age:",self.age,",salary:",self.salary) #创建Employee类的实例对象
emp1=Employee("Rose",,) #判断实例对象是否存在某个属性,存在返回True,否则返回False
if hasattr(emp1,'name'):
name_value=getattr(emp1,'name') #获取name属性值
print( "name的属性值为:",name_value)
else:
print ("员工属性不存在") #给实例添加一个属性
if hasattr(emp1,'tel'):
print ("员工属性已存在")
else:
setattr(emp1,'tel','')
t1=getattr(emp1,'tel')
print("tel的属性值为:",t1)
setattr(emp1,'tel','')
t2=getattr(emp1,'tel')
print("tel修改后的属性值为:",t2) #给实例删除一个属性
if hasattr(emp1,'age'):
delattr(emp1,'age')
else:
print ("员工tel属性不存在") #验证属性是否删除成功
if hasattr(emp1,'age'):
print( "属性age存在!")
else:
print ("属性age不存在!")
结果:
name的属性值为: Rose
tel的属性值为: 17718533234
tel修改后的属性值为: 15042622134
属性age不存在!
此外还有Python内置类属性,这里做简单介绍:
__dict__ : 类的属性(获取类所有信息):结果返回一个字典包含类属性及属性值,类方法等所有类信息
__doc__ :类的文档字符串,也就是类的帮助信息。
__name__: 类名
__module__: 类定义所在的模块 如果在当前模块返回’__main__’; 如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类(包含了所有父类组成的元组)
实例代码:
#coding=utf-
class Employee (object):
"""所有员工的基类"""
empCount =
def __init__(self, name, salary) :
#类的构造函数
self.name = name
self.salary = salary
Employee.empCount +=
def displayCount(self) :
#类方法
print ("total employee ",Employee.empCount )
def displayEmployee(self) :
print ("name :",self.name , ", salary :", self.salary) print ("Employee.__doc__:", Employee.__doc__ )
print ("Employee.__name__:", Employee.__name__ )
print ("Employee.__module__:", Employee.__module__ )
print ("Employee.__bases__:", Employee.__bases__ )
print ("Employee.__dict__:", Employee.__dict__ )
结果:
python类属性用法总结的更多相关文章
- python 类属性与方法
Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...
- Python类属性访问的魔法方法
Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...
- Python类属性,实例属性
1.Python类数据属性:定义在类里面但在函数外面的变量,它们都是静态的. #一段很简单的代码,但反应了很多 >>> class A(): a=1 #一个类里面有个属性a > ...
- Python类属性详解
在python开发中,我们常常用到python的类,今天就通过实例和大家扒一扒类的属性,一起来看看吧. 类属性 1.类定义后就存在,而且不需要实例化 2.类属性使得相同类的不同实例共同持有相同变量 类 ...
- python 类属性和实例属性
class AAA(): aaa = 10 # 情形1 obj1 = AAA() obj2 = AAA() print obj1.aaa, obj2.aaa, AAA.aaa # 情形2 obj1.a ...
- python 类属性、对象属性
类的普通属性: dir(Myclass), 返回一个key列表: Myclass.__dir__,返回一个字典: 1.类的数据属性: 2.类的方法: 类的特殊属性: 1.Myclass.__name_ ...
- python类属性和类方法(类的结构、实例属性、静态方法)
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- python 类属性 、实例属性,可变数据结构作为类属性需要注意的地方
1.一些经典的python错误不去阅读和不重视,就会把错误的做法带入到实际项目中来,甚至造成难以排查问题. 2.有一个大笨猪,按java写观察者模式,java写得是直接在类名下声明一个实例属性(不加s ...
- 关于Python类属性与实例属性的讨论
标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...
随机推荐
- 关于linux下部署JavaWeb项目,nginx负责静态资源访问,tomcat负责处理动态请求的nginx配置
1.项目的运行环境 linux版本 [root@localhost ~]# cat /proc/version Linux version -.el6.x86_64 (mockbuild@x86-.b ...
- ActiveMQ详解
Apache ActiveMQ介绍 使用MQ的场景 ActiveMQ的安装 收发消息的简单实现 ActiveMQ内部实现 queue和topic 消息持久化 kahadb原理 最关键的6个配置 Apa ...
- 终于将SAP系统完全配置通过了
花了近10天的时间,每天晚上加班加点,终于将SAP S4 1610 IDES系统从零到有,从头到尾配置一遍.目前只启用了一家模拟公司,从基础数据的设置,到销售订单开立(含按单按库需求),跑MRP需求, ...
- 长沙4月21日开发者大会暨.NET社区成立大会活动纪实
活动总结 2019年4月21日是一个斜风细雨.微风和煦的美好日子,由长沙.NET技术社区.腾讯云云加社区.微软Azure云技术社区.中国.NET技术社区.长沙柳枝行动.长沙互联网活动基地(唐胡子俱乐部 ...
- (翻译)W3C的Turtle文档
主要翻译如下页面,https://www.w3.org/TR/turtle/,对该页面中Turtle的内容部分进行翻译,希望对使用Turtle的朋友们有所帮助. 1 简介 2 Turtle语言 2.1 ...
- 从零单排学Redis【白银】
前言 只有光头才能变强 今天继续来学习Redis,上一篇从零单排学Redis[青铜]已经将Redis常用的数据结构过了一遍了.如果还没看的同学可以先去看一遍再回来~ 这篇主要讲的内容有: Redis服 ...
- 14 ,CSS 文字与文本
1.CSS 中长度与颜色 2.CSS 中的文字属性 3.CSS 中的文本属性 14.1 CSS 中长度与颜色 长度单位 说明 in 英寸 cm 公分 mm 公里 cm 以目前字体高度为单位 ex 以小 ...
- Android之崩溃日志管理
文章大纲 一.Android崩溃日志管理简介二.崩溃日志管理实战三.项目源码下载 一.Android崩溃日志管理简介 1. 什么是android崩溃日志管理 开发中有些地方未注意可能造成异常抛 ...
- Android之RxJava详解
文章大纲 一.什么是RxJava二.为什么要用RxJava三.RxJava使用详解四.项目源码下载五.参考文章 一.什么是RxJava Rx(Reactive Extensions)是一个库,用来 ...
- 底部导航栏-----FragmentTabHost
[说明] 1.主界面上添加父容器:FragmentTabHost 属于v4兼容包 需要指定该id为android:id/tabhost,不能修改,表示由android系统来托管这个id. 本身是一个F ...
