- 一、面向过程编程和面向对象编程
- 二、面向对象编程
- 三、类
- 3.1 类的创建与实例化
- 3.1.1 举例:创建学生类,并实例化差异性学生个体
- 3.2 类的继承
- 3.2.1 单继承
- 3.2.2 多继承
面向过程编程和面向对象编程是两种不同的编程思想,各有优劣。
语法:
class 类名:
属性1
属性2
方法1
方法2
#1个类中可以有多个属性和方法,也可以只有属性或者只有方法
3.1.1 举例:创建学生类,并实例化差异性学生个体
# _*_ coding: UTF-8 _*_
# @Time:2021/10/19 11:11
# @Author:岳涛@心馨电脑
# @File:Day08_面向对象编程.py
# @Software:PyCharm
import random as r
import pandas as pd
class Student():
# 定义学生类
def __init__(self, name='', sex='男', score=0):
# 初始化函数,一般类属性定义在这里
# self代表类的实例化对象,而不是类
self.name = name
self.sex = sex
self.score = score
def mult_table(self, n_st=1, n_end=9, xlsx_name=''):
"""
九九乘法表
:param n_st: 起始数字
:param n_end: 终止数字
:param xlsx_name: 输出文件名
:return: 无
"""
df = pd.Dataframe()
for i in range(n_st, n_end+1):
for j in range(1, i+1):
if i*j < n_end:
s_end = ' t'
else:
s_end = 't'
cell = f'{i}x{j} = {i*j}'
print(cell, end=s_end)
df.loc[i,j] = cell
print()
df = df.fillna('')
# print(df)
# df.to_excel(f'九九乘法表_{n_st}_{n_end}_{xlsx_name}.xlsx')
return
def prime_number(self):
print('我会算素数')
if __name__ == '__main__':
# 批量实例化50个学生
for i in range(1, 51):
# 数据准备
name = r.choice('赵钱孙李周吴郑王') + r.choice('艳晓高长成小春 ') + r.choice('强鹏峰丽娟梅全')
sex = r.choice(['男', '女'])
score = r.randint(75,100)
# 通过实例化类,创建具体的对象:个性化学生
s_xm = Student(name, sex, score)
print(f'我叫{s_xm.name}, 性别:{s_xm.sex}, 成绩:{s_xm.score}')
# 调用对象方法
s_xm.prime_number()
# 调用对象方法同时传入参数
s_xm.mult_table(i%10+1, i%10+5)
print('-'*30)
3.2 类的继承
3.2.1 单继承
重点:参数传递、初始化父类构造函数
# _*_ coding: UTF-8 _*_
# @Time:2021/10/19 11:11
# @Author:岳涛@心馨电脑
# @File:Day08_面向对象编程.py
# @Software:PyCharm
import random as r
import pandas as pd
# 定义学生类,默认继承Object顶级类
class Student():
def __init__(self, name='', sex='男', score=0):
""" 构造函数,一般类属性定义在这里 ,self代表类的实例化对象,而不是类"""
# 增加基本属性
self.name = name
self.sex = sex
self.score = score
def mult_table(self, n_st=1, n_end=9, xlsx_name=''):
""" 九九乘法表 """
df = pd.Dataframe()
for i in range(n_st, n_end+1):
for j in range(1, i+1):
if i*j < n_end:
s_end = ' t'
else:
s_end = 't'
cell = f'{i}x{j} = {i*j}'
print(cell, end=s_end)
df.loc[i,j] = cell
print()
df = df.fillna('')
# print(df)
# df.to_excel(f'九九乘法表_{n_st}_{n_end}_{xlsx_name}.xlsx')
return
def prime_number(self):
""" 计算素数 """
print('我会算素数')
class CollegeStudent(Student):
def __init__(self, name, sex, score, grade= '大二'):
"""构造函数,需要传入父类的参数和自己的参数"""
# 调用父类的构造函数
super().__init__(name, sex, score)
# 增加一个子类的基本属性
self.grade = grade
# 增加一个私有属性,外部不可以调用
self.__weigth = 60
def calculus(self):
""" 增加一个子类的方法 """
print(f'{self.grade}的大学生,体重:{self.__weigth},就得会微积分!')
def prime_number(self):
""" 覆写父类的方法 """
print(f'{self.grade}的学生早就不算素数了!')
if __name__ == '__main__':
# 批量实例化50个学生
for i in range(1, 1):
# 数据准备
name = r.choice('赵钱孙李周吴郑王') + r.choice('艳晓高长成小春 ') + r.choice('强鹏峰丽娟梅全')
sex = r.choice(['男', '女'])
score = r.randint(75,100)
# 通过实例化类,创建具体的对象:个性化学生
s_xm = Student(name, sex, score)
print(f'我叫{s_xm.name}, 性别:{s_xm.sex}, 成绩:{s_xm.score}')
# 调用对象方法
s_xm.prime_number()
# 调用对象方法同时传入参数
s_xm.mult_table(i%10+1, i%10+5)
print('-'*30)
# 实例化大学生
col_s1 = CollegeStudent('张继武', '男', 75, '大三')
print(col_s1.name, col_s1.sex, col_s1.score, col_s1.grade)
# print(col_s1.__weight) # 调用出错
col_s1.calculus()
col_s1.mult_table(3,5)
col_s1.prime_number()
3.2.2 多继承
重点:在整明白__mro__之前,实例化时不要传入参数,实例化后再给对象属性赋值。
# _*_ coding: UTF-8 _*_
# @Time:2021/10/19 11:11
# @Author:岳涛@心馨电脑
# @File:Day08_面向对象编程.py
# @Software:PyCharm
import random as r
import pandas as pd
# 定义码农类
class Code_farmer():
def __init__(self, hair=3):
self.hair = hair
def __str__(self):
print('Code_farmer')
def skill(self):
print(f'我是码农,会写代码...,就是头发少点,有{3}根...')
# 定义学生类,默认继承Object顶级类
class Student():
def __init__(self, name='', sex='男', score=0):
""" 构造函数,一般类属性定义在这里 ,self代表类的实例化对象,而不是类"""
# 增加基本属性
self.name = name
self.sex = sex
self.score = score
def __str__(self):
print('Student')
def mult_table(self, n_st=1, n_end=9, xlsx_name=''):
""" 九九乘法表 """
df = pd.Dataframe()
for i in range(n_st, n_end+1):
for j in range(1, i+1):
if i*j < n_end:
s_end = ' t'
else:
s_end = 't'
cell = f'{i}x{j} = {i*j}'
print(cell, end=s_end)
df.loc[i,j] = cell
print()
df = df.fillna('')
# print(df)
# df.to_excel(f'九九乘法表_{n_st}_{n_end}_{xlsx_name}.xlsx')
return
def prime_number(self):
""" 计算素数 """
print('我会算素数')
# 定义大学生类,继承自学生和码农
class College_student(Student, Code_farmer):
def __init__(self, name, sex, score, hair, grade= '大二'):
"""构造函数,需要传入父类的参数和自己的参数"""
# 调用父类的构造函数,不管有几个父类,调用一次super()构造就可以
print(College_student.__mro__)
super().__init__()
# 增加一个子类的基本属性
self.grade = grade
# 增加一个私有属性,外部不可以调用
self.__weigth = 60
def calculus(self):
""" 增加一个子类的方法 """
print(f'{self.grade}的大学生,体重:{self.__weigth},就得会微积分!')
def prime_number(self):
""" 覆写父类的方法 """
print(f'{self.grade}的学生早就不算素数了!')
if __name__ == '__main__':
# 批量实例化50个学生
for i in range(1, 1):
# 数据准备
name = r.choice('赵钱孙李周吴郑王') + r.choice('艳晓高长成小春 ') + r.choice('强鹏峰丽娟梅全')
sex = r.choice(['男', '女'])
score = r.randint(75,100)
# 通过实例化类,创建具体的对象:个性化学生
s_xm = Student(name, sex, score)
print(f'我叫{s_xm.name}, 性别:{s_xm.sex}, 成绩:{s_xm.score}')
# 调用对象方法
s_xm.prime_number()
# 调用对象方法同时传入参数
s_xm.mult_table(i%10+1, i%10+5)
print('-'*30)
# 实例化大学生
col_s1 = College_student('张继武', '男', 75, 10, '大三')
print(col_s1.name, col_s1.sex, col_s1.score, col_s1.grade)
# print(col_s1.__weight) # 调用出错
col_s1.calculus()
col_s1.mult_table(3,5)
col_s1.prime_number()
col_s1.skill()



