博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 小知识点(6)--静态方法、类方法、属性方法
阅读量:7118 次
发布时间:2019-06-28

本文共 1814 字,大约阅读时间需要 6 分钟。

(1)静态方法--》-@staticmethod装饰类中方法

只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性

class Dog(object):    def __init__(self,name):        self.name = name    @staticmethod #实际上跟类没什么关系了    def eat(self):        print("%s is eating %s" %(self.name,'dd'))    def talk(self):        print("%s is talking"% self.name)d = Dog("Td")d.eat(d)

(2)类方法-----》  @classmethod装饰类中方法

只能访问类变量,不能访问实例变量

@classmethod    def eat(self):        print("%s is eating %s" %(self.name,'dd'))

(3)属性方法----》 @property #attribute装饰类中方法

把一个方法变成一个静态属性

@property #attribute    def eat(self):        print("%s is eating %s" %(self.name))# 调用Dog(“TD”).eat

1.需要将一个值传递给eat属性方法-----修改属性值?

存在的问题是变成属性了直接赋值是无法实现的,需要在重新相同的方法,同时将该方法加上@eat.setter进行装饰。

@property      #attribute    def eat(self):        print("%s is eating %s" %(self.name,self.__food))   @eat.setter    def eat(self,food):        print("set to food:",food)        Self.__food=food

2.删除属性---同名方法使用  @eat.deleter修饰

@property      #attribute    def eat(self):        print("%s is eating %s" %(self.name,self.__food))    @eat.deleter    def eat(self):        del self.__food

总结:

1. 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法。

2. 类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量。

3. 属性方法的作用就是通过@property把一个方法变成一个静态属性,调用时与调用属性的方式相同。

   3.1 把一个方法变成静态属性的作用:

当某个属性的值是一系列动作后才得到的结果。所以每次调用时,其实它都要经过一系列的动作才返回结果的,但这些动作过程不需要用户关心,用户只关心得到这个属性的值即可,也就是说用户只需要调用这个属性就可以了。

   (1)修改属性值

  将由@proerty装饰器(把一个方法变成一个静态属性)使用@proerty.setter装饰器再装饰一下,此时 你需要写一个新方法(同名), 对这个属性值进行更改。

   (2)删除属性

   #1:将由@proerty装饰器(把一个方法变成一个静态属性)使用@proerty.deleter装饰器再装饰一下,此时 你需要写一个新方法(同名)。

   #2:使用del删除该实例所对应的属性方法(属性) 例如:del 对象.属性

 

源码学习地址:

posted on
2018-08-09 16:25 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wfaceboss/p/9449775.html

你可能感兴趣的文章
面向对象-day02
查看>>
如果要学习web前端,需要学习什么
查看>>
《编写高质量代码:改善Java程序的151个建议》笔记
查看>>
LeetCode每日一题: 搜索插入位置(No.35)
查看>>
利用装饰器实现mock和api的局部分离切换
查看>>
-[UIView hitTest:withEvent:] 方法总结
查看>>
springboot
查看>>
ios设计规范(下)
查看>>
Git-github 的基本应用
查看>>
前端基础8:HTML5新增标签及CSS3新属性 viewport 动画
查看>>
GitHub+Hexo 搭建个人网站
查看>>
使用BitmapFactory压缩图片遇到的问题总结
查看>>
vue指令和特殊特性
查看>>
Wings-让单元测试智能全自动生成
查看>>
LAMP(CentOS 7.2)环境下搭建WordPress
查看>>
css几个居中的方法
查看>>
程序员如何从0到1搭建自己的技术博客
查看>>
【Spring Boot 实战】数据库千万级分库分表和读写分离实战
查看>>
势高,则围广:TiDB 的架构演进哲学
查看>>
移动浏览器的四大内核
查看>>