栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python百日基础系列】Day08 - 面向对象编程基础:Class类

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python百日基础系列】Day08 - 面向对象编程基础:Class类

文章目录
  • 一、面向过程编程和面向对象编程
  • 二、面向对象编程
  • 三、类
    • 3.1 类的创建与实例化
      • 3.1.1 举例:创建学生类,并实例化差异性学生个体
    • 3.2 类的继承
      • 3.2.1 单继承
      • 3.2.2 多继承

一、面向过程编程和面向对象编程

面向过程编程和面向对象编程是两种不同的编程思想,各有优劣。

二、面向对象编程

三、类 3.1 类的创建与实例化

语法:

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()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号