前言
Python是一种面向对象的编程语言,可在Python中使用类和对象来组织和封装代码。面向对象编程(OOP)是一种编程范例,它将数据和操作数据的方法封装在一个对象内部,通过对象之间的交互来实现程序的功能。
1、面向对象的定义
面向对象(Object-Oriented)编程是一种编程范式,它以"对象 "作为程序的基本单元,将数据(属性 )和操作数据的方法(行为)封装在一起,以此来模拟现实世界的事物和概念。面向对象的编程使得程序可以更加模块化、可扩展和可维护。
在用面向对象编程时,把现实世界中的某个事物封装为类(也可以理解为成模板)。当在程序中引用时,引用这个类的变量就是实例。
面向对象编程的核心核心概念有以下几个:类 ,对象 ,封装 ,继承 ,多态。
2、类与实例
类(Class):类是对象的定义,它描述了对象的属性和方法。类是创建对象的模板,定义了对象的行为和状态。
类的命名方式时首字母要大写,并且类的返回值是一个对象(实例)。
# 定义了一个类MyClas
class MyClass:
pass
print(type(MyClass))
# 输出:<class 'type'>
对象(Object):对象是类的实例,它具有类定义的属性和方法。对象是类的具体实体,通过实例化类来创建对象。
# 定义了一个类MyClas
class MyClass:
pass
# 使用一个变量去引用这个类,那么这个变量 my 就是实例
my = MyClass()
3、初始化函数(魔法函数)
- 初始化函数
在Python中,初始化函数是一个特殊的方法,用于在创建对象时进行一些初始化操作。初始化函数的名称是**init(双下划线)**,它是所有类中必须定义的方法之一。
初始化函数在对象创建时自动调用,它接受self 参数作为第一个参数,表示正在创建的对象本身。其他参数可以根据类的需要来定义。
初始化函数的主要作用是初始化对象的属性。在初始化函数中,可以使用self.属性名来定义对象的属性,并为其赋初值。
例:
class ATMan:
"""
类:类型
实例:输出的一种类的表现形式
"""
def __init__(self, name, age):
# self只的是本身使用这个函数的对象
print(f"自身{self}", id(self))
# name和age是形参
self.name = name
self.age = age
a = ATMan("塞罗", 18)
print(id(a))
# 输出:自身<__main__.ATMan object at 0x000001B4CFB60DD0> 1876090555856
1876090555856
通过id 可以知道,self 就是引用这个类的实例。
- 魔法函数
在Python中,魔法函数(Magic methods)是一类特殊的函数,它们以双下划线(__)开头和结尾,通常被称为双下划线方法或特殊方法。这些魔法函数在类中定义,用于定义类的行为和特性,使得类的实例可以表现得像内置类型一样。
- init()
初始化函数,也是魔法函数。当创建一个类的实例时自动调用。用于初始化对象的状态。
- str()
定义对象的"非正式"或友好的字符串表示,可以通过 str()
调用或者在 print()
中使用。
例:
class MyClass:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"姓名:{self.name}"
my = MyClass("小明", 18)
print(my) # 输出:姓名:小明
- len()
返回对象的长度,可以通过内置函数len()调用。
例:
class MyClass:
def __init__(self, name, age):
self.name = name
self.age = age
def __len__(self):
return len(self.name)
my = MyClass("小明", 18)
print(len(my)) # 输出:2
等等。。。。。
4、构造函数和析构函数
构造函数 (Constructor): 构造函数是一种特殊的成员函数,用于创建对象时初始化对象的数据成员。构造函数的名称与类名相同,并且没有返回类型。构造函数可以有参数,也可以没有参数。如果没有定义构造函数,编译器会自动提供一个默认的构造函数。
例:
class MyClass:
# 构造初始化函数的self
def __new__(cls, *args, **kwargs):
instance = super().__new__(cls)
# 这里可以添加一些初始化逻辑
return instance
def __init__(self):
print("小明在玩洛克王国")
mc = MyClass()
print(mc) # 输出为:小明在玩洛克王国
析构函数(Destructor): 析构函数是一种特殊的成员函数,用于销毁对象时释放对象占用的资源。析构函数的名称与类名相同,前面加上一个波浪号(~)作为前缀,没有返回类型,也不接受任何参数。如果没有定义析构函数,编译器会自动提供一个默认的析构函数。
例:
class MyClass:
# 构造初始化函数的self
def __new__(cls, *args, **kwargs):
instance = super().__new__(cls)
# 这里可以添加一些初始化逻辑
return instance
def __init__(self):
print("小明在玩洛克王国")
# 析构函数
def __del__(self):
print("结束执行")
mc = MyClass()
print(mc) # 输出为:小明在玩洛克王国
结束执行