python中的组合
时间:2019-11-27
本文章向大家介绍python中的组合,主要包括python中的组合使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是组合:组合指的是一个对象中,包含另一个对象。
为什么要用组合:减少代码冗余
如何使用组合:
# 实现组合
class People:
def __init__(self, name , age, sex):
self.name = name
self.age = age
self.sex = sex
# 老师类
class Teacher(People):
def __init__(self, name, age, sex):
super().__init__(name, age, sex)
# 日期类
class Date:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
def tell_birth(self):
print(f'''
年:{self.year}
月:{self.month}
日:{self.day}
''')
s1 = Teacher('wanglu', 18, 'female')
d1 = Date(1997, 1, 29)
s1.d1 = d1
d1.tell_birth()
print(s1.d1.tell_birth())
总结:
继承:
继承是类与类的关系,子类继承父类的属性,子类与父类是一种‘从属’关系
组合:
组合是对象与对象的关系,一个对象拥有另一个对象中的属性,是一种你有我也有的关系
'''
练习需求:
选课系统:
1、有学生,有老师,学生何老师有属性‘名字,年龄、性别,课程’
2、有方法,老师与学生可以添加课程,打印学习/教授课程
'''
class People:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
# 添加课程
def add_course(self, course_obj):
self.course_list.append(course_obj)
#打印当前对象中课程列表的所有课程信息
def tell_all_course_info(self):
# 从当前对象中课程列表中取出所有课程对象
for course_obj in self.course_list:
course_obj.tell_course_info()
# 学生类
class Student(People):
def __init__(self, name, age, sex):
super().__init__(name, age, sex)
self.course_list = []
# 老师类
class Teacher(People):
def __init__(self, name, age, sex):
super().__init__(name, age, sex)
self.course_list = []
# 定义一个课程类:课程有:课程名称, 课程价格, 课程周期
class Course:
def __init__(self, course_name, course_price, course_time):
self.course_name = course_name
self.course_price = course_price
self.course_time = course_time
def tell_course_info(self):
print(f'''
====== 课程信息如下 ======
课程名称: {self.course_name}
课程价格: {self.course_price}
课程周期: {self.course_time}
''')
# 创建学生对象
s1 = Student('wanglu', 19, 'female')
# 创建课程对象
c1 = Course('python', 66666, 6)
c2 = Course('go', 7777, 2)
# 当前学生添加了课程对象
# 添加python课程
s1.add_course(c1)
# 添加go语言
s1.add_course(c2)
# 当前学生打印所有课程信息
s1.tell_all_course_info()
访问限制
什么是访问限制机制:
凡是在类内定义的属性或方法,都会被限制,外部不能直接访问,该属性原型
ps:看着像将该属性或方法隐藏起来了
python特有的:
注意:凡是在类内部定义__开头的属性或方法,都会变形为,
_类名__属性/方法。
为什么要有访问限制:
比如:将一些隐私的数据,隐藏起来,不让外部轻易获取。
接口:
可以将一对数据封装成一个借口,可以让用户调用接口,
并且通过相应的逻辑,最后再将数据返回给用户。
class User:
# __开头的属性
__name = 'wanglu'
__age = 19
__sex = 'male'
__ID = '2745140829'
__bal = 131415926
def __init__(self, name, age, sex):
self.__name = name
self.__age = age
self.__sex = sex
# 校验接口,获取用户数据
def parse_user(self, username, password):
if username == 'wanglu_jam' and password == '123':
print(f'''
通过验证,获取用户信息
用户名:{self.__name}
用户年龄:{self.__age}
用户性别:{self.__sex}
身份ID{self.__ID}
用户资产:{self.__bal}
''')
else:
print('校验失败')
# __开头的方法
def __run(self):
print('wanglu is lovely...')
obj = User('wanglu', 19, 'famale')
obj.parse_user('wanglu_jam', '123')
print(obj._User__name)
'''
夺命三问:
1.什么是封装?
封: 比如将一个袋子,封起来。
装: 比如将一堆小猫、小狗和jason装在袋子里。
# 对象 ---> 相当于一个袋子
封装指的是可以将一堆属性和方法,封装到对象中。
PS: 对象就好比一个 “袋子/容器”,可以存放一对属性和方法。
PS: 存不是目的,目的是为了取,可以通过 “对象.” 的方式获取属性或方法。
2.为什么要封装?
可以通过 “对象.” 的方式 “存放/获取” 属性或方法。
对象拥有 "." 的机制。
方便数据的存取。
3.如何封装?
class User:
x = 10
def func():
pass
obj = User()
obj.y = 20
obj ---> x, func, y
原文地址:https://www.cnblogs.com/zhangjinyi97/p/11944595.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android ProgressDialog用法之实现app上传文件进度条转圈效果
- Android实现获取meta-data和build.gradle的值
- 浅谈Android Studio导出javadoc文档操作及问题的解决
- Android获取清单文件中的meta-data,解决碰到数值为null的问题
- android studio 打包自动生成版本号与日期,apk输入路径详解
- 详解关于AndroidQ获取不到imsi解决方案
- 解决webview 第二次调用loadUrl页面不刷新的问题
- 浅谈 Android 7.0 多窗口分屏模式的实现
- Kotlin中的对象表达式和对象声明的具体使用
- Android 实现为点击事件添加震动效果
- 解决Android studio Error:(30, 31) 错误: 程序包 不存在的问题
- AndroidQ 沙箱适配多媒体文件(小结)
- Bitcron 主题 Berry(简约wordpress主题)
- Android 实现图片转二进制流及二进制转字符串
- Android 如何实现exclude aar包中的某个jar包