• python—类的组成、对象的创建、面向对象三大特征


    个人简介 

    • 大家好,我是韩慧腾。一名正在努力学python的小白,本文章为初学的笔记,希望各位多多指教。💙
    • 欢迎点赞+收藏+留言💜
    • 过去的价值不代表未来的地位🧡

    一、编程的两大思想

    二、python中的类

     类是多个类似事物组成的群体的统称。能够帮助我们快速理解和判断事物的性质

    • 类属性:类中方法外的变量称为类属性,被该类的所有对象所共享
    • 类方法:使用@classmethod修饰的方法,使用类名直接访问的方法,默认参数是cls
    • 静态方法:使用@staticmethod修饰的方法,使用类名直接访问的方法,没有默认参数
    • 实例方法默认参数是self
    1. # @Author:韩慧腾
    2. # @Time :2022/7/11 10:45
    3. # @File :class_Demo1.py
    4. # 努力已经来不及了,你得拼命
    5. class Student:#Student为类的名称,通常类名首字母是大写的
    6. name='张三'#直接写在类里的变量,称为类属性
    7. def init(self,name,age):
    8. self.name=name
    9. self.age=age
    10. #实例方法
    11. def city(self):
    12. print('我最喜欢的城市是'+self)
    13. #静态方法
    14. @staticmethod
    15. def run():
    16. print('我喜欢跑步')
    17. #类方法
    18. @classmethod
    19. def c(cls):
    20. print('我是一个类方法')
    21. #在类之外定义的称为函数,在类之内定义的称为方法
    22. def food(s):
    23. print('我最喜欢的事物是'+s)

     三、对象的创建(类的实例化)

    创建对象后就可以调用类中的内容 

    调用对象中方法的两种方式:

    1. 实例名.方法名
    2. 类名.方法名(实例名)

    四、面向对象的三大特征

    • 封装:提高程序的安全性

    对于想要封装的属性,可以在其变量名之前加__

    1. # @Author:韩慧腾
    2. # @Time :2022/8/14 11:37
    3. # @File :Demo_00.py
    4. # 努力已经来不及了,你得拼命
    5. class Student:
    6. def __init__(self,name,age):
    7. self.name=name
    8. self.__age=age
    9. stu=Student('张三',20)
    10. print(stu.name)
    11. '''print(stu.age)#此处就会报错,不能以这样的方式访问age'''
    12. print(stu._Student__age)#以该种方式可以访问age,会正常输出20
    • 继承:提高代码的复用性

     如果一个类没有继承任何类,则默认继承object;python支持多继承,定义子类时,必须在其构造函数中调用父类的构造函数。

    方法重写:如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写,子类重写后的方法中可以通过super().方法名()调用父类中被重写的方法。

    1. # @Author:韩慧腾
    2. # @Time :2022/8/14 11:37
    3. # @File :Demo_00.py
    4. # 努力已经来不及了,你得拼命
    5. class Person:
    6. def __init__(self,name,age):
    7. self.name=name
    8. self.age=age
    9. def show(self):
    10. print(self.name+'今年'+self.age+'岁了')
    11. class Me(Person):
    12. pass
    13. m=Me('张三','18')
    14. m.show()
    • 多态:提高程序的可扩展性和可维护性

    概述:简单地说,多态就是“具有多种形态”,它指的是:即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。

    1. # @Author:韩慧腾
    2. # @Time :2022/8/14 16:53
    3. # @File :Demo_01.py
    4. # 努力已经来不及了,你得拼命
    5. class Animal:
    6. def eat(self):
    7. print('动物都爱吃')
    8. class Dog(Animal):
    9. def eat(self):
    10. print('狗爱啃骨头')
    11. class Cat(Animal):
    12. def eat(self):
    13. print('猫吃鱼')
    14. class Person:
    15. def eat(self):
    16. print('人类应该吃的更健康')
    17. #定义一个函数
    18. def f(Animal):
    19. Animal.eat()
    20. #调用函数
    21. f(Dog())#狗爱啃骨头
    22. f(Person())#人类应该吃的更健康
    23. '''此处和其他语言不太一样,该函数的参数部分不一定是Animal类或者其子类,是任意有eat方法的类或者所继承的方法有eat类都可以'''

    五、object类

    概述:object类是所有类的父类,因此所有类都有object类的属性和方法;内置函数dir()可以查看指定对象所有的属性;object有一个_str_()方法,用于返回一个对于“对象的描述”,对应于内置函数str()常用于print()方法,帮助我们查看对象的信息,所以我们经常会对_str_()进行重写。

    没有重写str()方法之前输出对象名会输出内存地址,重写str方法可以自定义输出对象名时的内容。

    六、特殊属性和特殊方法

    1. # @Author:韩慧腾
    2. # @Time :2022/8/14 19:31
    3. # @File :Demo_02.py
    4. # 努力已经来不及了,你得拼命
    5. #特殊属性
    6. class Study:
    7. def __init__(self,name,score):
    8. self.name=name
    9. self.score=score
    10. def show(self):
    11. print(self.name+"考了"+self.score)
    12. s=Study('张三','100')
    13. s.show()
    14. print(s.__dict__)#实例对象的属性字典
    15. print(Study.__dict__)#类对象的属性字典
    16. print(s.__class__)#输出对象所属的类
    17. print(Study.__base__)#输出该类的父类,对于继承了多个类的类使用bases,可以以元组的形式返回所有继承的类
    18. print(Study.__mro__)#查看类的继承层次结构
    19. print(Study.__subclasses__())#查看该类的子类
    • 之前我们所用的运算符'+'底层原理就是调用的__add__()方法,如果我们想要两个类对象实现+操作,可以重写__add__()方法。
    • 之前求列表长度用的len函数底层原理就是调用的__len__()方法,如果我们想要得到某个对象的长度,可以通过重写__len__()方法进行自定义

    七、类的浅拷贝和深拷贝

    • 浅拷贝

    概述:python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,原对象与拷贝对象会引用同一个子对象。(意思为拷贝的对象和原对象的子类是相同的)

    • 深拷贝

    概述:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,原对象和拷贝对象所有的子对象也不相同

  • 相关阅读:
    2022杭电多校第二场题解
    联想Y9000P-2022款踩坑指南 加装固态和内存 win10系统安装
    202333读书笔记|《四季读诗》——绿蚁新醅酒,红泥小火炉。晚来天欲雪,能饮一杯无。
    Redis数据类型之hash
    从零开始写 Docker(十七)---容器网络实现(中):为容器插上”网线“
    9、Java——二维数组案例代码详解
    C++ 函数
    修改datagridView单元格颜色(行颜色,列颜色)
    总结:golang一些常见写法
    信息学奥赛一本通:陶陶把手伸直的时候能够达到的最大高度
  • 原文地址:https://blog.csdn.net/weixin_65049289/article/details/125704617