面向对象—02面向对象高级特性

一、类属性与实例属性

1、类属性

(1)类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有。
(2)占用内存:类属性在内存中只存在 一个副本。
(3)作用域:可以通过类名或者对象名来访问

2、实例属性

(1) 即对象属性,它不被所有类对象的实例对象所共有。
(2)占用内存:在内存中的副本个数取决于对象个数,有几个对象,就有几个实例属性。
(3)作用域:只能通过对象名来访问

二、类方法与静态方法

1、类方法

类方法是类对象所拥有的方法,
需要用修饰器一般以@classmethod来标识其为类方法
1). 对于类方法,第一个参数必须是类名cls(形参)
2). 能够通过实例对象和类去访问

import time

class Date(object):
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    def __str__(self):
       return '%s-%s-%s' %(self.year, self.month, self.day)

    @classmethod   
    def today(cls):
        """
        类方法 @classmethod ,传入类名 Date
        :return: 返回 类Date实例化出的对象
        """
        now = time.localtime()
        return cls(now.tm_year, now.tm_mon, now.tm_mday)  # Date() 实例化对象

if __name__ == '__main__':
    today = Date.today()   # 通过类名直接访问 , today()方法返回当前日期对象
    print(today)  # 有魔术方法__str__可以友好展示,不然打印出的是一个日期对象 :<__main__.Date object at 0x000001A8CD4B95F8>

2、静态方法

静态方法需要用修饰器一般以@staticmethod来标识其为静态方法,
1). 静态方法不需要传任何参数
2). 能够通过实例对象和类去访问。

三、property类属性

1、定义

一种用起来像是使用的实例属性一样的特殊属性,可以对应于类的某个方法
使用:
定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数
调用时,无需括号

2、应用场景

(1)某个属性只能访问不能修改,将类方法转换成类属性

class Date(object):
    def __init__(self, year, month, day):
        self.__year = year      # 定义为私有属性
        self.__month = month
        self.__day = day

    @property      # 将该私有属性用@property定义为一个函数,返回,则可以进行查看
    def year(self):
        return self.__year
    @property
    def month(self):
        return self.__month
    @property
    def day(self):
        return self.__day

if __name__ == '__main__':
    dateobj = Date(2020, 1, 1)
    print(dateobj.year, dateobj.month, dateobj.day)  # 2020 1 1 则可以查看到私有属性
    # 虽然year, month, day 都是方法,但是这里调用不用加(), 将类方法转换成了类属性

(2)某一个属性不能直接返回, 需要计算, 可以通过property属性实现

"""
分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一
类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数据库
中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求
数据时就要显示的指定获取从第start条到第end条的所有数据 这个分页的功能包括:
• 根据用户请求的当前页和总数据条数计算出 start 和 end
• 根据start 和 end 去数据库中请求数据
"""

class Pagintor(object):
    def __init__(self,page = 1, per_page = 5):
        """
        :param page: 当前展示的页码
        :param per_page: 每页显示的数据个数
        """
        self
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值