2020-02-07

2020-02-07  本文已影响0人  数据小黑升值记

@property

功能:将方法转变为属性调用
场景:为避免对类属性的直接访问和修改,使用此装饰器实现getter和setter方法,而不用在调用方法实现对属性的修改,可以直接使用属性设置,安全方便
实例

class Person(object):
    def __init__(self,name,age):
        self._name=name
        self._age=age

    @property #实现了一个关于age的getter方法
    def age(self):
        return self._age

    @age.setter #实现了关于age的setter方法,如果不设置此处,则age为只读属性
    def age(self,age):
        self._age=age



    def play(self):
        if self._age<=16:
            print('%s玩aa'%self._name)
        else:
            print('%s玩bb'%self._name)


def main():
    person=Person('小明',12)
    person.play()
    person.age=22
    person.play()



if __name__=='__main__':
    main()

注意

  1. 属性名和方法名不能一样,否则死循环
  2. 定义方法的时候,@property必须在@xxx.setter之前,且修饰的方法名相同

__slots__

功能:限定当前类只能设置某些属性,但对子类不起作用

实例方法

常规类中定义的方法,需要先实例化后才可以调用,通常第一个参数指定为self,指该类的一个实例化对象

chass Pizza(object):

    def __init__(self,size):
        self._size=size
    
    def get_size(self):
        return self.size

静态方法

class Pizza(object):
    @staticmethod
    def mix_ingredients(x, y):
        return x + y

    def cook(self):
        return self.mix_ingredients(self.cheese, self.vegetables)

类方法

class Pizza(object):
    def __init__(self, radius, height):
        self.radius = radius
        self.height = height

    @staticmethod
    def compute_area(radius):
         return math.pi * (radius ** 2)

    @classmethod
    def compute_volume(cls, height, radius):
         return height * cls.compute_area(radius)

    def get_volume(self):
        return self.compute_volume(self.height, self.radius)

抽象方法

import abc

class BasePizza(object):
    __metaclass__  = abc.ABCMeta

    @abc.abstractmethod
    def get_radius(self):
         """Method that should do something."""
上一篇下一篇

猜你喜欢

热点阅读