python22_面向对象编程的高级特性 类方法和静态方法 property类属性

1. 类方法和静态方法

1.1 类方法

在这里插入图片描述

1.2 静态方法

在这里插入图片描述

1.3 代码分析

  • 实例方法: python解释器会自动将对象/实列传入方法
  • 类方法: python解释器会自动将类传入方法
  • 静态方法: python解释器不会自动传入任何参数
class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print(f'self:{self}')

    # 实例方法: python解释器会自动将对象/实列传入方法
    def get_age(self):
        return self.age

    # 类方法: python解释器会自动将类传入方法
    @classmethod
    def get_cls(cls):
        print('cls:', cls)

    # 静态方法: python解释器不会自动传入任何参数
    @staticmethod
    def get_info():
        print('static method信息')

if __name__ == '__main__':
    s = Student('倩倩', 21)
    s.get_age()
    s.get_cls()
    s.get_info()

在这里插入图片描述

1.4 类方法和静态方法的简单案例

class date(object):
    # 正常方法: 将对象作为参数传给self
    def get_self(self):
        print(f'self:{self}')

    # 类方法: 将类名作为参数传递给cls
    @classmethod
    def get_cls(cls):
        print(f'cls:{cls}')

    # 静态方法: 不自动传递任何参数
    @staticmethod
    def get_static(name, age):
        print('静态方法', name, age)

d = date()
d.get_cls()
d.get_self()
d.get_static('倩倩', 21)

在这里插入图片描述

2. property类属性

2.1 property类属性的理解

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.2 代码分析

"""
类属性应用需求: 对于京东商城中显示电脑主机的列表页面,
             每次请求不可能把数据库中的所有内容都显示到页面上,
             而是通过分页的功能局部显示,
             所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据
这个分页的功能包括:
根据用户请求的当前页和总数据条数计算出 m 和 n
根据 m 和 n 去数据库中请求数据
"""
class Page(object):
    """
    [ user1, user2, user3 ...... user100 ]
    page = 2, per_page = 10
    第一页: start=0    end=10
    第二页: start=10   end=20
    第三页: start=20   end=30
    ......
    第page页: start=(page-1)*per_page     end=page*per_page
    """
    def __init__(self, page, per_page=10):
        self.page = page
        self.per_page = per_page

    # property类属性: 将类方法变成类属性的过程
    @property
    def start(self):
        return (self.page-1) * self.per_page
    @property
    def end(self):
        return self.page * self.per_page

if __name__ == '__main__':
    goods = [ 'good'+str(i+1) for i in range(100) ]
    page = Page(page=2)
    # property类属性,提高python书写的性能,不再需要括号()
    print(page.start)
    print(page.end)
    print(goods[page.start:page.end])
    # print(page.start())
    # print(page.end())
    # print(goods[page.start():page.end()])

在这里插入图片描述

2.3 property类属性的简单案例

  1. 正常情况下,python解释器会将self对象传给类方法
class date(object):
    def __init__(self, year, month, day):
        # 私有属性
        self.__year = year
        self.__month = month
        self.__day = day

    def year(self):
        return self.__year

today = date(2021, 12, 24)
print(today.year())	# 2021
  1. 将类方法object.year()转变成类属性object.year,只是让代码更加简洁而已
class date(object):
    def __init__(self, year, month, day):
        # 私有属性
        self.__year = year
        self.__month = month
        self.__day = day

    # 将类方法object.year()转变成类属性object.year,只是让代码更加简洁而已
    @property
    def year(self):
        return self.__year

today = date(2021, 12, 24)
print(today.year)	# 2021
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值