1. 类方法和静态方法
1.1 类方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/964334d8b6f74840b3ce3636c19a34d3.png)
1.2 静态方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/7787addb44994455b7fd6f06ec779550.png)
1.3 代码分析
- 实例方法: python解释器会自动将对象/实列传入方法
- 类方法: python解释器会自动将类传入方法
- 静态方法: python解释器不会自动传入任何参数
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
print(f'self:{self}')
def get_age(self):
return self.age
@classmethod
def get_cls(cls):
print('cls:', cls)
@staticmethod
def get_info():
print('static method信息')
if __name__ == '__main__':
s = Student('倩倩', 21)
s.get_age()
s.get_cls()
s.get_info()
![在这里插入图片描述](https://img-blog.csdnimg.cn/d9a3f987ed1645a7bc896ab06a69c386.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_17,color_FFFFFF,t_70,g_se,x_16)
1.4 类方法和静态方法的简单案例
class date(object):
def get_self(self):
print(f'self:{self}')
@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)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ea38e8106ea44f1ca3b2ab0bfd5a578b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_16,color_FFFFFF,t_70,g_se,x_16)
2. property类属性
2.1 property类属性的理解
![在这里插入图片描述](https://img-blog.csdnimg.cn/d0ef733ae99449e991b71cc8162fc03d.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/80da493079b748629630b3dc0c178c3f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7b4c4ecf69c1427b92eee33df8f2a7be.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_20,color_FFFFFF,t_70,g_se,x_16)
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
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)
print(page.start)
print(page.end)
print(goods[page.start:page.end])
![在这里插入图片描述](https://img-blog.csdnimg.cn/dffd151be6264719bfc6794023f5b1f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_20,color_FFFFFF,t_70,g_se,x_16)
2.3 property类属性的简单案例
- 正常情况下,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())
- 将类方法object.year()转变成类属性object.year,只是让代码更加简洁而已
class date(object):
def __init__(self, year, month, day):
self.__year = year
self.__month = month
self.__day = day
@property
def year(self):
return self.__year
today = date(2021, 12, 24)
print(today.year)