Python - 类和对象

你好,有抱负的Python程序员们!今天,我们将开始一段激动人心的旅程,深入了解Python中的面向对象编程(OOP)。系好安全带,因为我们即将改变你对代码的看法!

Python - Classes & Objects

Python中的类是什么?

想象一下你在构建一个虚拟动物园。你不会从头开始创建每一种动物,对吧?这时候类就派上用场了!

Python中的类就像是一个蓝图或模板,用于创建对象。它定义了一组属性和方法,该类的对象将具有这些属性和方法。

让我们创建一个简单的类来表示狗:

class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed

def bark(self):
print(f"{self.name} 说汪!")

在这个例子中,Dog 是我们的类。它有 namebreed 这样的属性,以及一个名为 bark() 的方法。

在Python中创建类

创建一个类就像使用 class 关键字后跟类名一样简单。让我们创建一个更详细的 Car 类:

class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0

def drive(self, distance):
self.odometer += distance
print(f"行驶了 {distance} 英里。总里程:{self.odometer} 英里")

def honk(self):
print("哔哔!")

在这里,__init__ 是一个特殊的方法,称为构造函数。当我们创建这个类的新对象时,它会被调用。

对象是什么?

如果说类是蓝图,那么对象就是从那个蓝图实际创建的“东西”。它是类的特定实例。

在Python中创建类的对象

创建对象(也称为实例化)就像使用我们的蓝图创建真实的东西一样。让我们创建一些汽车:

my_car = Car("Toyota", "Corolla", 2020)
your_car = Car("Honda", "Civic", 2019)

print(my_car.make)  # 输出:Toyota
your_car.drive(50)  # 输出:行驶了 50 英里。总里程:50 英里
my_car.honk()  # 输出:哔哔!

每辆汽车都是一个独立的对象,有自己的属性和方法集。

在Python中访问对象的属性

我们可以使用点符号访问对象的属性。让我们看看我们的汽车:

print(f"我的汽车是一辆 {my_car.year} {my_car.make} {my_car.model}")
# 输出:我的汽车是一辆 2020 Toyota Corolla

Python类的内置属性

Python类带有一些内置属性。让我们探索它们:

class MyClass:
x = 5

print(MyClass.__name__)  # 输出:MyClass
print(MyClass.__module__)  # 输出:__main__
print(MyClass.__dict__)  # 输出:{'__module__': '__main__', 'x': 5, ...}

Python数据类型的内置类

你知道吗?即使是基本的Python类型也是对象。让我们看看:

print(type(5))  # 输出:<class 'int'>
print(type("Hello"))  # 输出:<class 'str'>
print(type([1, 2, 3]))  # 输出:<class 'list'>

Python中的一切都是对象!

Python中的垃圾回收(销毁对象)

在Python中,我们不需要手动销毁对象。当对象不再使用时,Python的垃圾收集器会自动处理。

import gc

# 创建一个对象
my_car = Car("Toyota", "Corolla", 2020)

# 删除引用
my_car = None

# 强制垃圾回收(通常不需要)
gc.collect()

Python中的数据隐藏

在OOP中,我们经常需要控制对某些属性的访问。Python使用前缀下划线的约定来表示属性:

class BankAccount:
def __init__(self, balance):
self._balance = balance  # 受保护的属性
self.__secret = "保密"  # 私有属性

def deposit(self, amount):
self._balance += amount

def get_balance(self):
return self._balance

account = BankAccount(1000)
print(account._balance)  # 输出:1000(但我们不应该这样做!)
print(account.__secret)  # 这将引发一个AttributeError

以下是本章介绍的方法的总结表:

方法 描述
__init__(self, ...) 构造函数方法,创建新对象时调用
__str__(self) 返回对象的字符串表示
__repr__(self) 返回对象的详细字符串表示
__len__(self) 定义内置 len() 函数的行为
__getitem__(self, key) 定义索引操作的行为
__setitem__(self, key, value) 定义赋值给索引值的行为

就这样!你已经迈出了Python中面向对象编程的第一步。记住,熟能生巧。尝试创建自己的类和对象,很快你就能像一个专业人士一样构建复杂、高效的程序了!

Credits: Image by storyset