面向对象编程
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将数据和操作数据的方法封装在一起,以对象的形式表示。在Python中,一切皆为对象,因此Python是一种面向对象的语言。
类
类是面向对象编程的基本概念,它是一种用户自定义的数据类型。类定义了一组属性和方法,用于描述该类的对象。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
上面的代码定义了一个名为Person的类,它有两个属性(name和age)和一个方法(say_hello)。属性是类的数据成员,方法是类的函数成员。
实例
实例是类的具体化,也可以称作对象,它是类的一个具体实现。例如:
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)
上面的代码创建了两个Person类的实例,分别是person1和person2。
初始化方法
初始化方法是类的特殊方法,是类的魔法方法之一,它在创建类的实例时被调用,即无序调用,自动执行。它用于初始化类的属性。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
上面的代码定义了一个名为__init__的初始化方法,它有两个参数(name和age),用于初始化Person类的属性。
魔法方法
魔法方法是Python中的特殊方法,它们以双下划线开头和结尾。它们用于实现类的特殊行为。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 用于且只能返回字符串
def __str__(self):
return f"{self.name} ({self.age})"
上面的代码定义了一个名为__str__的魔法方法,它用于返回Person类的字符串表示。
字符串方法
字符串方法是类的方法之一,它用于返回类的字符串表示。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name} ({self.age})"
上面的代码定义了一个名为__str__的字符串方法,它用于返回Person类的字符串表示。
self
self是Python中的特殊变量,它用于引用类的实例。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
上面的代码中,self用于引用Person类的实例。
简单说,self就是在创建对象时,对象本身。下面的代码可以直接说明:
class Student:
def __init__(self, name, age):
print("初始化对象")
print("self的id:", id(self))
self.name = name
self.age = age
s1 = Student("秀", 21)
print("s1的id:", id(s1))
s2 = Student("飞", 22)
print("s2的id:", id(s2))
输出结果:
上面的代码分别打印了self和实例的id,你会发现执行了两次,那是因为每创建一个对象,就会调用一次对应的类。并且self的id和实例的id时一模一样的!
数据、属性、操作、行为
在面向对象编程中,数据是类的属性,操作是类的方法,行为是类的特殊行为。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
上面的代码中,name和age是Person类的数据,say_hello是Person类的操作,__str__是Person类的行为。
父类、基类、超类
父类、基类、超类是面向对象编程中的术语,它们用于描述类之间的关系。父类是一个类,它被其他类继承。子类是一个类,它继承自另一个类。基类和超类是父类的同义词。
子类、派生类
子类、派生类是面向对象编程中的术语,它们用于描述继承关系。子类是一个类,它继承自另一个类。派生类是子类的同义词。
并且子类可以继承父类的属性和方法:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("汪汪")
class Dog(Animal):
def __init__(self, name, age):
Animal.__init__(self, name)
self.age = age
def eat(self):
print("啃骨头")
class DogChild(Dog):
def __init__(self, name, age, color):
Dog.__init__(self, name, age)
self.color = color
dog = DogChild("小汪汪", 2, "black")
dog.speak()
dog.eat()
上面的代码DogChild类继承了Dog类,而Dog类继承Animal类,并且你会发现你会发现创建的DogChild的实例可以使用DogChild类中没有声明的speak和eat方法。
多态
多态是面向对象编程中的术语,它用于描述同一操作作用于不同的对象上时,产生不同的结果。在Python中,多态是一种自然而然的现象,因为Python是一种动态类型语言。
简单说就是同一函数可以被不同类型的不同对象调用。
重载多态
重载多态是面向对象编程中的术语,它用于描述同一操作作用于不同类型的参数时,产生不同的结果。在Python中,重载多态是一种自然而然的现象,因为Python是一种动态类型语言。
也就是同一函数有不同的参数。
重写多态
重写多态是面向对象编程中的术语,它用于描述子类重写父类方法的现象。在Python中,重写多态是一种自然而然的现象,因为Python是一种动态类型语言。
实例属性
实例属性是类的属性之一,它是实例的数据成员。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
上面的代码中,name和age是Person类的实例属性。
实例方法
实例方法是类的方法之一,它是实例的函数成员。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
上面的代码中,say_hello是Person类的实例方法。
类属性
类属性是类的属性之一,它是类的数据成员。例如:
class Person:
count = 0
def __init__(self, name, age):
self.name = name
self.age = age
Person.count += 1
上面的代码中,count是Person类的类属性。
类方法
类方法是类的方法之一,它是类的函数成员。例如:
class Person:
count = 0
def __init__(self, name, age):
self.name = name
self.age = age
Person.count += 1
@classmethod
def get_count(cls):
return cls.count
上面的代码中,get_count是Person类的类方法,需要用@修饰,而@classmethod就代表类方法。
静态方法
静态方法是类的方法之一,它是类的函数成员。它与类和实例无关,因此可以在不创建实例的情况下调用。例如:
class Math:
@staticmethod
def add(x, y):
return x + y
上面的代码中,add是Math类的静态方法。你会发现add函数前面有一个**@staticmethod**,其实就是装饰器的原理。
🆗,文章到此结束,如果觉得对你有帮助,可以给个关注,持续更新中🌹🌹🌹