python----特性(property)、静态方法(staticmethod)、类方法(classmethod)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python----特性(property)、静态方法(staticmethod)、类方法(classmethod),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2022字,纯文字阅读大概需要3分钟。
内容图文
![python----特性(property)、静态方法(staticmethod)、类方法(classmethod)](/upload/InfoBanner/zyjiaocheng/856/e352b1aee9904a9f8bdf2649ef07c22f.jpg)
一、特性property
1、什么事特性property
property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值
__author__ = 'rxz'
# -*- encoding:utf-8 -*-
import math
class Circle:
def __init__(self,radius):
self.radius =radius
@property
def area(self):
return math.pi*self.radius**2 #计算圆的面积
@property
def perimeter(self):
return 2*math.pi*self.radius #计算圆的周长
c = Circle(5)
print(c.area) #可以向访问数据属性一样去访问area,会触发一个函数的执行,动态计算出一个值
print(c.perimeter)
"""
78.53981633974483
31.41592653589793
"""
注意:此时的特性arear和perimeter不能被赋值,一旦赋值就会报错
2、 为什么要用property
将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则
除此之外,看下
ps:面向对象的封装有三种方式:
【public】
这种其实就是不封装,是对外公开的
【protected】
这种封装方式对外不公开,但对朋友(friend)或者子类(形象的说法是“儿子”,但我不知道为什么大家 不说“女儿”,就像“parent”本来是“父母”的意思,但中文都是叫“父类”)公开
【private】
这种封装对谁都不公开
python并没有在语法上把它们三个内建到自己的class机制中,在C++里一般会将所有的所有的数据都设置为私有的,然后提供set和get方法(接口)去设置和获取,在python中通过property方法可以实现
__author__ = 'rxz'
# -*- encoding:utf-8 -*-
import math
class Foo:
def __init__(self,name):
self.__Name =name #将所有的数据属性都隐藏起来
@property
def get_name(self):
return self.__Name #obj.name访问的是self.__NAME(这也是真实值的存放位置)
@get_name.setter
def set_name(self,value):
if not isinstance(value,str): #在设定值之前进行类型检查
raise TypeError('%s must be str' % value)
self.__Name = value #通过类型检查后,将值value存放到真实的位置self.__NAME
@get_name.deleter
def del_name(self):
raise TypeError('Can not delete')
f =Foo("lida")
print(f.get_name)
f.set_name = "wer"
print(f.get_name)
del f.get_name
"""
lida
Traceback (most recent call last):
wer
File "C:/Users/Administrator/PycharmProjects/ManagerSystem/test/a.py", line 28, in <module>
del f.get_name
AttributeError: can't delete attribute
"""
内容总结
以上是互联网集市为您收集整理的python----特性(property)、静态方法(staticmethod)、类方法(classmethod)全部内容,希望文章能够帮你解决python----特性(property)、静态方法(staticmethod)、类方法(classmethod)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。