python语法糖

类对象、实例对象
    类对象:表示一类事物,多个实例对象共享类的属性,在内存中只有一份
    实例对象:由类对象创建出来的对象,在内存中可以有多份,互相独立
    1.类属性、实例属性
    2.类方法、实例方法、静态方法
        类方法:
            方法名上面写@classmethod,有一个cls的参数
            操作类属性
        实例方法:
            写在类中,不需要写装饰器,有一个self的参数
            操作实例属性
        静态方法:
            装饰器@staticmethod
            即不操作类属性又不操作实例属性
class  Game(object):
        top_score = 0    类属性
  
        def __init__(self,name):
            self.name = name    实例属性
            self.score=0
        
        def set_score(self,s):   实例方法
            self.score = s
        
        @classmethod       类方法
        def set_top_socre(cls,s):
            top_score = s
            
        @staticmethod      静态方法
        def player_doc():    
            print("游戏的说明")
        @perporty    相当于调用属性,但实际是一个方法
        def size(self):
            return 100


    g = Game("铁锤")
    g.size  得到的结果是100   像调用属性一样调用这个方法
View Code
property属性
    作用:@property加到方法上,再去访问时就像访问属性一样 obj.b
    应用场景:
        1.调用方法变得更简单
        2.方法中给属性加权限验证,仍然向调用属性一样
    装饰器
        获取值:@property
        设置值:@price.setter
        删除值:@price.deleter
    类属性           
        property(fget=None, fset=None, fdel=None, doc=None)    
# 翻页功能
class Pager:

    def __init__(self,page):
        self.page = page
        self.page_num = 12

    @property
    def start(self):
        ret = (self.page - 1) * self.page_num
        return ret
    @property
    def end(self):
        ret = self.page * self.page_num
        return ret

p = Pager(5)
# print(p.start())
# print(p.end())
print(p.start)
print(p.end)




# 商场打折    
class Goods(object):
    def __init__(self):
        # 原价
        self.original_price = 100
        # 折扣
        self.discount = 0.8

    @property
    def price(self):
        # 实际价格 = 原价 * 折扣
        new_price = self.original_price * self.discount
        return new_price

    @price.setter
    def price(self, value):
        self.original_price = value

    @price.deleter
    def price(self):
        del self.original_price

obj = Goods()
obj.price         # 获取商品价格
obj.price = 200   # 修改商品原价
del obj.price     # 删除商品原价



class Foo(object):
    def get_bar(self):
        print("getter...")
        return 'laowang'

    def set_bar(self, value):
        """必须两个参数"""
        print("setter...")
        return 'set value' + value

    def del_bar(self):
        print("deleter...")
        return 'laowang'

    BAR = property(get_bar, set_bar, del_bar, "description...")

obj = Foo()
obj.BAR  # 自动调用第一个参数中定义的方法:get_bar
obj.BAR = "alex"  # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入
desc = Foo.BAR.__doc__  # 自动获取第四个参数中设置的值:description...
print(desc)
del obj.BAR  # 自动调用第三个参数中定义的方法:del_bar方法    

property
View Code
原文地址:https://www.cnblogs.com/wangxiongbing/p/10051650.html