面向对象编程

1.什么是类和对象

  1. 面向对象编程(Object-oriented programming,缩写:OOP)是一种计算机编程架构。OOP将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。在面向对象编程中,程序中的每个对象都应该能够接收数据、处理数据并发送数据。对象可以被看作是一个小型的计算机,它们可以相互通信、协作完成任务。在Python中,所有的数据类型都是对象,因此Python是一种面向对象的编程语言。

    • 面向过程编程(Procedural programming)是一种基于过程的程序设计方法,它将程序分解为一个个的子程序,每个子程序完成一个特定的任务。面向过程编程强调的是程序的执行过程,它将数据和操作数据的函数分开,通过函数来传递数据。在面向过程编程中,程序的执行流程是线性的,即按照代码的顺序依次执行。
    • 面向函数编程(Functional programming)是一种基于函数的程序设计方法,它将程序看作是一系列的函数调用。在面向函数编程中,函数是一等公民,它可以作为参数传递给其他函数,也可以作为返回值返回。面向函数编程强调的是函数的组合和变换,它将数据和操作数据的函数分开,通过函数来处理数据。在面向函数编程中,程序的执行流程是递归的,即通过函数的调用来实现程序的执行。
    • 面向对象编程(Object-oriented programming)是一种基于对象的程序设计方法,它将程序分解为一个个的对象,每个对象都有自己的属性和方法。在面向对象编程中,对象是程序的基本单元,它将数据和操作数据的函数封装在一起,以提高软件的重用性、灵活性和扩展性。在面向对象编程中,程序的执行流程是消息传递的,即通过对象之间的消息传递来实现程序的执行。
  2. 类(Class)是面向对象编程中的一个重要概念,它是一种用户自定义的数据类型,用于描述具有相同属性和方法的对象的集合。类是对象的模板,它定义了对象的属性和方法,可以看作是一种抽象数据类型。对象是类的实例

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def say_hello(self):
            print("Hello, my name is", self.name, "and I am", self.age, "years old.")
    
    '''
    这段代码定义了一个名为Person的类,它有两个属性(name和age)和一个方法(say_hello)。属性是类的数据成员,方法是类的函数成员。在类中定义的方法可以访问类的属性,也可以访问其他方法。在Python中,类的属性和方法都是公有的,可以被类的实例对象访问。
    '''
    
    1. 创建类:

      在Python3中,类名通常使用大写字母开头的大驼峰命名法,例如Person、Student、Teacher等。这是一种常见的命名规范,可以使类名更加清晰易读。另外,类名应该具有描述性,能够准确地反映类的作用和属性。

      要创建一个类的实例对象,可以使用类名后面跟一对括号,例如:

      class Person:
        '''
        1.什么是方法:
        	定义在类中的函数叫做方法
        2.什么是类方法
        	类方法是一种特殊的方法,它属于类而不是对象。类方法可以访问类的属性和方法,但不能访问对象的属性和方法。在Python中,可以使用@classmethod装饰器来定义一个类方法。
        3.静态方法
        	静态方法是一种特殊的方法,它不属于类或对象,但可以在类或对象上调用。静态方法不能访问类或对象的属性和方法,它只能访问它自己的参数和局部变量。在Python中,可以使用@staticmethod装饰器来定义一个静态方法。
        4.魔法方法
        	魔法方法是Python中的一种特殊方法,它们以双下划线开头和结尾,例如__init__、str、__add__等。这些方法在特定的情况下自动调用,例如在创建类的实例对象时、在打印对象时、在对对象进行加法运算时等。魔法方法可以让我们自定义类的行为,使其更符合我们的需求。
        '''
        	# 属性
          def __init__(self, name, age):
              self.name = name
              self.age = age
      		# 方法
          def say_hello(self):
              print("Hello, my name is", self.name, "and I am", self.age, "years old.")
          # 类方法
          @classmethod
          def get_count(cls):
              print(f"There are {cls.count} people.")    
          # 静态方法
         	@staticmethod
          def get_info():
              print("This is a Person class.")
      
      # person是Person类的对象
      person = Person("Alice", 25)
      # 对象干了什么
      person.say_hello()
      
      • 什么是方法
        定义在类中的函数叫做方法

      • 类方法
        类方法是一种特殊的方法,它属于类而不是对象。类方法可以访问类的属性和方法,但不能访问对象的属性和方法。在Python中,可以使用@classmethod装饰器来定义一个类方法。

      • 静态方法
        静态方法是一种特殊的方法,它不属于类或对象,但可以在类或对象上调用。静态方法不能访问类或对象的属性和方法,它只能访问它自己的参数和局部变量。在Python中,可以使用@staticmethod装饰器来定义一个静态方法。

      • 魔法方法
        魔法方法是Python中的一种特殊方法,它们以双下划线开头和结尾,例如__init__、str、__add__等。这些方法在特定的情况下自动调用,例如在创建类的实例对象时、在打印对象时、在对对象进行加法运算时等。魔法方法可以让我们自定义类的行为,使其更符合我们的需求。

        • 常见的魔法方法:

          • __init__创建类的对象的时候就会自动调用,在创建对象的时候传参

          • __repr__打印对象时,会打印repr的返回值(必须为字符串)

            class Person:
              	def __repr__(self):
                    return f"Person(name={self.name}, age={self.age})"
            person = Person("Alice", 25)
            print(person)
            
            # 结果为Alice (25)
            
      • 类属性

        在Python中,类属性是属于类的属性,而不是属于类的实例对象的属性。类属性可以被所有的实例对象共享,它们通常用于存储与类相关的常量或默认值。

      • 对象属性

        在Python中,对象属性是属于类的实例对象的属性,它们通常用于存储与实例对象相关的数据。

    2. 创建对象

      类名()

      # person是Person类的对象
      person = Person("Alice", 25)
      # 对象干了什么
      person.say_hello()
      
    3. 继承

      继承是面向对象编程中的一个重要概念,它允许我们创建一个新的类,该类从现有的类中继承属性和方法。被继承的类称为父类或超类,新创建的类称为子类或派生类。子类可以重写父类的方法,也可以添加新的属性和方法。

      在Python中,可以使用以下语法来定义一个子类:

      class ChildClass(ParentClass):
          # attributes and methods
      # 其中,ChildClass是子类的名称,ParentClass是父类的名称。子类可以访问父类的属性和方法,也可以重写父类的方法
      # 例如,在以下代码中,我们定义了一个名为Student的子类,它从Person类中继承了name和age属性,并添加了一个新的属性major和一个新的方法study:
      class Student(Person):
          def __init__(self, name, age, major):
            	#继承当前类的父类
              super().__init__(name, age)
              # super(Person,self).__init__()
              self.major = major
      
          def study(self):
              print(f"{self.name} is studying {self.major}.")
      
      

你可能感兴趣的:(python,开发语言)