python-面向对象高级特性

编程入门 行业动态 更新时间:2024-10-10 05:17:21

python-<a href=https://www.elefans.com/category/jswz/34/1769334.html style=面向对象高级特性"/>

python-面向对象高级特性

目录

  • 1、类方法与静态方法
  • 2、property类属性
  • 3、单例模式

1、类方法与静态方法

class date(object):# 正常的方法: 将对象作为参数传给selfdef get_self(self):print('self:', self)# 类方法: 将类名作为参数传给cls@classmethoddef get_cls(cls):print('cls:', cls)# 静态方法:不自动传递任何参数@staticmethoddef get_static(name, age):print("静态方法", name, age)d = date()
d.get_self()
d.get_cls()
d.get_static("张三", 18)
"""
相关的源码:from datetime import  datetime
"""class Student(object):def __init__(self, name, age):self.name = nameself.age = age# 实例方法, python解释器会自动将对象/实例传入方法。def get_age(self):print('self:', self)return  self.age# 类方法:python解释器会自动将类传入方法。@classmethoddef get_cls(cls):print('cls:', cls)# 静态方法:python解释器不会自动传入任何参数@staticmethoddef get_info():print("static method信息")if __name__ == '__main__':s = Student('张三', 18)s.get_age()s.get_cls()s.get_info()

2、property类属性

“”"
类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数据库中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据 这个分页的功能包括:

  • 根据用户请求的当前页和总数据条数计算出 m 和 n
  • 根据m 和 n 去数据库中请求数据
from datetime import  datetime
"""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 = pageself.per_page = per_page# 类属性: 将类方法变成类属性的过程。@propertydef start(self):return (self.page-1) * self.per_page@propertydef end(self):return  self.page * self.per_pageif __name__ == '__main__':goods = ['good'+str(i+1) for i in range(100)]page = Page(page=10, per_page=3)print(goods[page.start:page.end])


property 理解

3、单例模式

通过装饰器实现单例模式

from functools import  wraps
def singleton(cls):# 通过一个字典存储类和对象信息{"Class":"object"}instances = {}@wraps(cls)def wrapper(*args, **kwargs):# 为了保证单例模式, 判断该类是否已经实例化为对象# 1. 如果有对象,直接返回存在的对象# 2. 如果没有则实例化对象, 并存储类和对象到字典中, 最后返回对象if instances.get(cls):return instances.get(cls)object = cls(*args, **kwargs)instances[cls] = objectreturn  objectreturn  wrapper@singleton
class People(object):passp1 = People()
p2 = People()
print(p1, p2)
print(p1 is p2)  # 判断是否为单例模式(p1和p2内存地址是否相同)

通过new方法实现单例化模式

更多推荐

python-面向对象高级特性

本文发布于:2023-07-28 19:49:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1292353.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:面向对象   特性   高级   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!