• Python面向对象静态方法,类方法,属性方法


    静态方法(staticmethod名义上归类管理,实际上在静态方法里访问不到类或实例中的静态属性)

     1 class days(object):
     2     def __init__(self, food):
     3         self.food = food
     4 
     5     @staticmethod  # 实际和类没有关系
     6     def tell(self):
     7         print('这里有%s,%s快来' % (self.food, 'name'))
     8 
     9 
    10 a = days('香蕉')
    11 a.tell(a)

    类方法(classmethod只能访问类变量,不能访问实例变量)

     1 lass f2(object):
     2     name = '大哥大大'  # 类变量
     3 
     4     def __init__(self, name):
     5         self.name = name
     6 
     7     @classmethod
     8     def eat(self):
     9         print('这里有%s,【%s】' % (self.name, '类的方法'))
    10 
    11 
    12 f2.eat()

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

    由属性的定义和调用要注意一下几点:
    1 定义时,在普通方法的基础上添加 @property 装饰器;
    2 定义时,属性仅有一个self参数
    3 调用时,无需括号
    
    属性的定义有两种方式:
    1 装饰器 即:在方法上应用装饰器
    2 静态字段 即:在类中定义值为property对象的静态字段

    经典类,具有一种@property装饰器:

     1 class f3(object):
     2     def __init__(self, name):
     3         self.name = name
     4         self.__food = None
     5 
     6     @property
     7     def eat2(self):
     8         print('这里%s,【%s】' % (self.name, '在干什么'))
     9 
    10 
    11 c = f3('阿猪')
    12 c.eat2

    新式类,具有三种@property装饰器,分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法。

     1 class f4(object):
     2     def __init__(self, name):
     3         self.name = name
     4         self.__food = None
     5 
     6     @property  # 把一个普通方法变为属性方法,获取
     7     def eat(self):
     8         print('这里%s,【%s】' % (self.name, self.__food))  # 由于没有参数self.__food在这没有调用
     9 
    10     @eat.setter  # 修改
    11     def eat(self, food):
    12         print('我要吃%s' % food)
    13         self.__food = food
    14 
    15     @eat.getter  # 删除
    16     def eat(self):
    17         del self.__food
    18         print('删除字段self.__food')
    19 
    20 
    21 d = f4('阿豪')
    22 d.eat
    23 d.eat = '饺子'
    24 del d.eat
    25 d.eat
  • 相关阅读:
    获得H.264视频分辨率的方法
    学习Mathematica
    关于LaTeX公式排版
    关于Jordan标准形
    关于surface gradient
    Jacobi-Anger expansion
    两个1/x类的广义函数
    积分计算相关内容
    关于multi-index
    关于$mathcal{D}(0,1)$上的一个有趣结论
  • 原文地址:https://www.cnblogs.com/jesse-gong/p/7878331.html
Copyright © 2020-2023  润新知