''''''
'''
1、简述面向对象三大特性并用示例解释说明?【背写】
1、封装
狭义的封装:把一组属性封装到一个对象,创建对象的时候
广义的封装:代码块,函数、对象、类、模块-py文件都是封装
把封装后的对象看成一个黑盒子,只需要关注输入和输出,不必关注黑盒子内部的实现
2、继承
1、避免代码的重复
2、可扩展
共有的写在父类,扩展的时候用子类
3、多态
2. 面向中的变量分为哪几种?并用示例说明区别?【背写】
1、成员变量
写在构造方法中的,前面是self. 局部的意思
2、类变量(静态变量)
写在类中方法(成员方法)之外的变量,全局的意思
多个对象共享的
3. 面向对象中方法有哪几种?并用示例说明区别?【背写】
1、成员方法
1、包括构造方法和普通方法
2、第一个参数是self
3、通过对象来直接调用
2、静态方法
1、参数不需要self
2、写法是方法名字上面加上一行@staticmethod
3、通过类名来调用
4、把它理解成类中的函数即可
3、类方法
1、参数只有一个cls,表示可以说传入类名
2、写法是方法名字上面加上一行@classmethos
3、通过类名来调用
4、可以在类方法中创建对象,设计模式
4. 面向对象中的属性有什么?并用示例说明?
定义:用方法来表示一个属性(成员变量)
写法:方法名字上面加一行@property
只有一个参数self
必须有返回值(属性取的就是返回值)
调用:对象名.方法名
注意方法名字后面不加小括号
例子:人的年龄
1、成员变量中,一般不存储人的年龄,因为年龄每年都会变
2、成员变量中,存储的是人的生日
3、可以用成员方法,根据生日计算年龄,但是年龄是一个属性-名称
用方法-动词计算不是特别合适
4、就引入了用方法的变种--属性来表示年龄
5. 简述静态方法和类方法的区别?
1、写法不同
前者方法名字前面加上@staticmethod
后者方法名字前面加上@classmethod
2、参数不同
前者的参数没有self
后者的参数是cls
3、含义不同
前者可以理解成类中的函数,不需要传self,对象
后者的参数传入的是类名,主要用于对象的创建,设计模式
'''
6. 面向对象的方法中那个无需传参数?
静态方法无需传参数
成员方法self
类方法cls
7. 面向对象中公有和私有成员,在编写和调用时有哪些不同?
1、编写上
后者名字前面需要加上__,前者不需要
2、调用上
后者不能通过对象直接访问
后者可以通过对象调用公有成员方法的形式,访问私有变量或者私有方法
(把私有变量或者私有方法写在公有成员方法中)
前者可以通过对象直接访问
# 18.现有50条数据.请使用面向对象的思维来完成这50条数据的分页工作(升级题)
class Page:
def __init__(self,lst,pagesize):
self.lst = lst
self.pagesize = pagesize
def start(self):
'''
返回第一页的内容
'''
def end(self):
'''
返回最后一页的内容
'''
def index(self):
'''
返回指定页的内容
'''
page = input('请输入你要查询的数据的页数:')
'''
伪代码思路:
第一步
1、一共是6条数据,每页2条,分成3页
2、输入页数1,打印1-2(索引号和值都是1,2)
3、输入页数3,打印5-6
第二步
1、一共是5条数据,每页2条,分成3页
2、输入页数1,打印1-2(索引号和值都是1,2)
3、输入页数3,打印5
'''
class Page:
def __init__(self,lst,pagesize):
self.lst = lst
self.pagesize = pagesize
def start(self):
'''
返回第一页的内容
'''
# total_page = len(self.lst)/self.pagesize
print(self.lst[:self.pagesize])
return self.lst[:self.pagesize]
def end(self):
'''
返回最后一页的内容
'''
total_page = len(self.lst) / self.pagesize
# print(total_page)
if type(total_page) == int:
print(self.lst[-self.pagesize:])
return self.lst[-self.pagesize:]
else:
result, remainder = divmod(len(self.lst),self.pagesize)
# print(result) 2 商是2
# print(remainder) 1 余数是1
print(self.lst[-remainder:]) #[5]
return self.lst[-remainder:]
def specified_page(self,n):
print(self.lst[self.pagesize*(n-1):self.pagesize*n])
return self.lst[self.pagesize*(n-1):self.pagesize*n]
def index(self):
'''
返回指定页的内容
'''
while 1:
page = input('请输入你要查询的数据的页数,输入q退出:')
if page.upper() == 'Q':
print('退出了')
break
elif page == '1':
self.start()
elif page == '-1':
self.end()
elif page.isdigit() == False:
print('只能输入数字,请输入数字')
elif int(page) <= (len(self.lst)/self.pagesize)+1 :
self.specified_page(int(page))
# elif int(page) > (len(self.lst) / self.pagesize) + 1 :
# print('页码超出范围了')
else:
print('页码超出范围了')
# li1 = [1,2,3,4,5,6]
li1 = [1,2,3,4,5]
p1 = Page(li1,2) #一共是5条记录,每页2条记录
p1.index()
print('------------------------18 ')
来源:CSDN
作者:qq_37904909
链接:https://blog.csdn.net/qq_37904909/article/details/103497385