首页 > 编程语言 >PYTHON专题-(4)python叫你搞对象

PYTHON专题-(4)python叫你搞对象

时间:2024-08-04 14:23:51浏览次数:12  
标签:__ PYTHON 子类 self 搞对象 python 实例 方法 属性

什么是面向过程编程?

  • 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

什么是面向对象编程?

  • 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据操作数据的函数

面向过程编程和面向对象编程的区别?

  • 面向过程编程是一种编程范式,它将程序分解为一系列的函数或过程,即一组函数的顺序执行,每个函数执行特定的任务。
  • 面向对象编程(OOP)则是一种不同的编程范式,它使用“对象”来封装数据和操作数据的方法。面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
  • 在面向对象编程中,类是创建对象的模板,对象是类的实例。面向对象编程支持继承、封装多态等特性,这使得代码更加模块化、可重用和易于维护。

面向对象需要了解哪些基本概念?

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

什么是类属性?

  • 在Python中,类属性是属于类本身的属性,它们被类的所有实例共享。类属性通常用于定义类的常量或状态(变量),可以通过类名直接访问和修改。
    class MyClass:
        class_attribute = "这是一个类属性"
    print(MyClass.class_attribute)  # 输出: 这是一个类属性

 什么是类的私有属性?

  • 类的私有属性是指在类定义中,以两个下划线开头的属性。这些属性在类的外部是无法直接访问的,它们只能在类的内部被访问和修改。私有属性的目的是为了保护数据,防止外部代码随意修改对象的内部状态。例如:
    class MyClass:
        def __init__(self):
            self.__private_attribute = "这是一个私有属性"
    my_object = MyClass()
    print(my_object.__private_attribute)   
    # 这将引发错误,因为私有属性不能在类的外部访问
  • 在这个例子中,`__private_attribute`是一个私有属性,尝试从类的外部访问它将导致错误。

实例属性和类属性有什么区别?

  • 实例属性和类属性是Python中的两种不同类型的属性。实例属性是指定义在实例对象上的属性,只能通过实例对象访问。每个实例对象都可以具有不同的实例属性值。实例属性通常在类的构造方法中定义。例如:
    class Person:
        def __init__(self, name):
            self.name = name
    
    person1 = Person("Alice")
    person2 = Person("Bob")
    print(person1.name)  # 输出:"Alice"
    print(person2.name)  # 输出:"Bob"
    
  • 类属性是指定义在类上的属性,可以通过类对象和实例对象访问。类属性在所有实例对象之间共享相同的值。类属性通常在类的定义中直接定义。例如:
    class Person:
        species = "Human"
    
    print(Person.species)  # 输出:"Human"
    
    person1 = Person()
    person2 = Person()
    print(person1.species)  # 输出:"Human"
    print(person2.species)  # 输出:"Human"
    
    Person.species = "Homo sapiens"
    print(person1.species)  # 输出:"Homo sapiens"
    print(person2.species)  # 输出:"Homo sapiens"
    

类有几种操作?

  • 类的操作主要包括类的定义对象的创建与初始化、以及通过类来封装数据和方法。此外,还可以通过继承来扩展类的功能,实现多态性,以及定义和访问类的属性和方法

怎么创建类?

  • 在Python中创建类,你需要使用`class`关键字,后跟类名和冒号。类名通常遵循大驼峰命名法。类的定义中可以包含初始化方法`__init__`,以及其他方法和属性。
  • 例如在这个例子中,`MyClass`是一个类,它有一个初始化方法`__init__`和一个方法`my_method`。`__init__`方法用于创建类的实例时初始化属性,`my_method`是一个实例方法,可以访问和修改实例的属性。
    class MyClass:
        def __init__(self, value):
            self.my_attribute = value
        def my_method(self):
            return "Hello, World!"

类中的self是什么?

  • 在 Python中,self 是一个惯用的名称,用于表示类的实例(对象)自身,而不是类。它是一个指向实例的引用,使得类的方法能够访问和操作实例的属性。self 不是 python 关键字,在类方法中把他换成其他字符串也是可以正常执行的。
  • 当你定义一个类,并在类中定义方法时,第一个参数通常被命名为 self,尽管你可以使用其他名称,但强烈建议使用 self,以保持代码的一致性和可读性。

什么是__init__() 方法?

  •  `__init__()`方法是Python中的一个特殊方法,也被称为构造器。它在创建类的新实例时自动调用,用于初始化对象的状态,即设置对象的初始属性值。
  • `__init__()`方法的第一个参数通常是`self`,代表对象本身,其余参数则用于接收外部传入的初始化数据。

怎么实例化一个对象?

  • 在Python中,实例化一个对象需要先定义一个类,然后使用类名后跟括号来创建类的实例。
  • 例如,如果有一个名为`MyClass`的类,你可以这样实例化一个对象:
    my_object = MyClass(value)
    
    在这个例子中,`my_object`是`MyClass`的一个实例,`value`是传递给`MyClass`的初始化方法`__init__`的参数。 

什么是类方法? 

  • 类方法是定义在类内部的函数,它们的第一个参数通常是`cls`或者是`self`,代表类本身。类方法可以访问和修改类属性,但不能直接访问实例属性。类方法通常用于执行与类相关的操作,可以通过`@classmethod`装饰器来定义。例如:
    class MyClass:
        @classmethod
        def class_method(cls):
            print("这是一个类方法")
    MyClass.class_method()  
    
    # 输出: 这是一个类方法

怎么定义和调用类方法?  

  • 在Python中,类方法是定义在类内部的函数,它们可以访问和修改类的属性。定义类函数时,需要在函数名前加上`def`关键字,并且第一个参数通常是`self`,它代表类的实例本身。例如:
    class Car:
        def __init__(self, brand, model):
            self.brand = brand
            self.model = model
        def start(self):
            print(f"The {self.brand} {self.model} car is starting.")
    # 创建Car类的实例
    my_car = Car("Toyota", "Corolla")
    # 调用start方法
    my_car.start()
  • 在这个例子中,`__init__`是一个特殊的方法,用于初始化类的实例属性,而`start`是一个普通的方法,用于模拟汽车启动的行为。
  • 通过`self`参数,`start`方法可以访问和操作`Car`类实例的属性。

什么是类的私有方法?

  • 类的私有方法是指只能在类的内部被访问和调用的方法。私有方法通常用来封装类的内部实现细节,只在类内部使用,不对外暴露。
  • 私有方法一般在方法前面加上"private"关键字来修饰,并且不能被其他类或对象所访问。私有方法有助于提高代码的安全性和可维护性,同时也可以减少对外部的依赖关系。
  • 两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods

普通函数和类函数有什么区别?

  • 普通函数是独立的代码块,可以接受参数、执行操作并返回结果。
  • 类函数(也称为方法)是定义在类内部的函数,它们可以访问和修改类的属性。
  • 类函数通常用于封装数据相关操作,以便构建复杂和可重用的数据结构。和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。

 什么是数据封装?

  • 面向对象编程的数据封装是指通过类来封装数据和方法,使得数据和操作数据的方法绑定在一起,形成一个独立的实体。这样可以隐藏对象的内部状态和实现细节,只通过公共接口与外界交互,从而提高代码的模块化和安全性。
  • 例如,可以定义一个类来模拟现实世界中的实体,如汽车,其中包含属性(如品牌、型号、颜色)和方法(如启动、停止、加速),这些方法可以操作类的属性,但属性的访问和修改可以通过类提供的方法来控制,而不是直接暴露给外部。

什么是类的继承?

  • 类的继承是面向对象编程中的一个重要概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类、基类或超类)的属性和方法。
  • 子类可以继承父类的所有公有和受保护的成员变量和方法,并且可以在子类中添加新的成员变量和方法,或者重写父类的方法。
  • 通过继承,子类可以拥有父类的特性,同时可以根据具体需求进行修改和扩展,提高代码的复用性和灵活性。
  • 继承关系通常用“is-a”来描述,即子类是父类的一种特殊类型。

怎么实现类继承?

  • Python中可以通过使用关键字class来定义一个类,而类的继承可以通过在定义类时在括号中指定一个或多个父类来实现。以下是一个简单的示例:
    class Animal:
        def __init__(self, name):
            self.name = name
    
        def speak(self):
            print("我是一只动物")
    
    class Cat(Animal):
        def __init__(self, name):
            super().__init__(name)
    
        def speak(self):
            print("喵喵喵")
    
    class Dog(Animal):
        def __init__(self, name):
            super().__init__(name)
    
        def speak(self):
            print("汪汪汪")
    
    cat = Cat("小猫")
    cat.speak()  # 输出:"喵喵喵"
    
    dog = Dog("小狗")
    dog.speak()  # 输出:"汪汪汪"
    
  • 在上面的示例中,Animal是一个基类,CatDog是继承自Animal的子类。
  • 子类可以继承基类的方法和属性,并且可以重写基类的方法或添加自己的方法。在子类中,可以使用super()来调用父类的方法和构造函数。

什么是多继承?

  • 多继承是一种编程语言的特性,允许一个类继承自多个父类。在多继承中,子类可以继承多个父类的属性和方法,从而具有更多的功能和灵活性。
  • 多继承的优点是可以通过继承多个父类来获得不同父类的特性和功能,使得代码复用更加灵活。
  • 缺点瑟吉欧可能出现命名冲突,即不同父类中有相同命名的属性或方法,导致子类调用时产生歧义。同时,多继承增加了代码的复杂性,使得程序更难理解和维护。

什么是方法重写?

  • 方法重写指的是子类中重新定义父类中已有的方法。方法重写的规则是:
  1. 子类中的方法名必须与父类中的方法名相同。
  2. 子类中的方法参数个数、顺序和类型必须与父类中的方法相同。
  3. 子类中的方法可以新增其他参数,但是在调用时无法使用新增的参数。
  • 当子类的方法与父类的方法同名时,子类对象调用该方法时,会优先调用子类中的方法,而不会调用父类中的方法。这样就实现了对父类方法的重写。

标签:__,PYTHON,子类,self,搞对象,python,实例,方法,属性
From: https://blog.csdn.net/qq_41914036/article/details/140904770

相关文章

  • Python 基础教学:中文编码处理
    《Python基础教学:中文编码处理》在编程中,处理中文字符时经常会遇到编码问题。Python3默认使用UTF-8编码,但在处理文件、网络数据或与旧系统交互时,可能需要处理GBK、GB2312等其他编码。1.字符串的编码和解码在Python中,字符串(str)默认是Unicode编码。当你需要将......
  • Python 基础教学:深入了解 continue、break 和 pass 语句
    《Python基础教学:深入了解continue、break和pass语句》Python中的控制流语句不仅仅包括条件语句和循环,还包括continue、break和pass这三个特殊的关键字,它们在特定情况下可以控制程序的流程。1.continue语句continue用于跳过当前循环的剩余代码,在循环控制结......
  • Python 基础教程:List(列表)的使用
    《Python基础教程:List(列表)的使用》在Python中,列表是最基本的数据结构之一,它是一种有序的、可变的数据集合,可以包含任意类型的元素,包括数字、字符串、其他列表等。1.列表的创建列表使用方括号[]创建,列表中的元素用逗号,分隔。#创建一个包含整数的列表numbers......
  • kettle从入门到精通 第八十三课 ETL之kettle kettle调用python且接收返回值
    场景:kettle调用python执行脚本,处理之后,再把结果数据流发给下一个步骤。 看到有个qq群里有个小伙伴求助要实现kettle调用python脚本,然后接收python脚本执行的结果,最后将结果传递到下一个步骤。之前的课程里面介绍的是kettle通过shell步骤调用python脚本,没有接收python返回的结果......
  • Python | 函数式编程
    文章目录1函数式编程2lamda表达式(匿名函数)3偏函数4闭包和自由变量5内置函数5.1map()函数5.2reduce()函数5.3filter()函数5.4sorted函数1函数式编程函数式编程(functionalprogramming)其实是个很古老的概念,诞生距今快60年啦!最古老的函数式编程语言Lisp......
  • 3:python语法第二章:语法基础2(适合小白进行观看)
    目录:3.1条件控制语句3.1.1基本的if,else语句3.1.2if嵌套首先学习两个语句的话,最为重要的就是要搞清楚这个底层逻辑是啥,学会了底层的逻辑便很容易的写出代码。3.1条件控制语句3.1.1基本的if,else语句基本的if,else的代码,可以首先理解一些什么是if,在英文中if指的是如果,所以说......
  • 2:python第二章:python语法基础1(适合小白学习)
    目录2.1:变量2.1.1变量的赋值与更换变量的值2.1.2变量的名称2.1.3多个变量的赋值2.1.4变量的输出2.2:数据结构(基本数据结构)2.2.1字符串(string)2.2.1.1访问字符(索引)2.2.1.2切片2.2.2整数(integer)2.2.3浮点数(float)2.2.4复数(complexnumber)2.3:运算符 2.3.1基本的运算......
  • Python面试题:结合Python技术,如何使用NetworkX进行复杂网络建模与分析
    NetworkX是一个用于创建、操作和研究复杂网络(图)的Python库。它提供了丰富的工具来构建、操纵和分析各种类型的图。下面是一个基本的示例,演示如何使用NetworkX进行复杂网络建模与分析。安装NetworkX首先,确保你已经安装了NetworkX。可以使用以下命令进行安装:pipinstallne......
  • Python应用—简单邮件发送功能
    importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeader#使用正确的SMTP服务器地址和端口号#以163邮箱为例server=smtplib.SMTP_SSL('smtp.163.com',465)#使用SSL连接#登录邮箱server.login('自己账户','自己密码')#替换为......
  • Python爬虫技术 第32节 最佳实践和常见问题
    Python爬虫技术是一种用于从网站上自动抓取数据的技术。它涉及到网络请求、HTML解析、数据提取等多个环节。下面我将详细介绍Python爬虫的最佳实践以及一些常见的问题解决方法,包括日志记录和错误报告、爬虫维护和更新等方面。Python爬虫基础架构一个典型的Python爬虫程序......