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 像调用属性一样调用这个方法
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