• 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
  • 相关阅读:
    勿忘心安
    设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA=3/5c,则tan(A-B)的最大值为
    P1011 车站
    第一天
    P1134 阶乘问题
    P3152 正整数序列
    某数论
    DO YOU WANNA BUILD A SNOW MAN ?
    luogu P1579 哥德巴赫猜想(升级版)
    紫书 习题 10-25 UVa 1575 (有重复元素的全排列+暴搜)
  • 原文地址:https://www.cnblogs.com/wangxiongbing/p/10051650.html
Copyright © 2020-2023  润新知