Python - 类和对象
你好,有抱负的Python程序员们!今天,我们将开始一段激动人心的旅程,深入了解Python中的面向对象编程(OOP)。系好安全带,因为我们即将改变你对代码的看法!
Python中的类是什么?
想象一下你在构建一个虚拟动物园。你不会从头开始创建每一种动物,对吧?这时候类就派上用场了!
Python中的类就像是一个蓝图或模板,用于创建对象。它定义了一组属性和方法,该类的对象将具有这些属性和方法。
让我们创建一个简单的类来表示狗:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"{self.name} 说汪!")
在这个例子中,Dog
是我们的类。它有 name
和 breed
这样的属性,以及一个名为 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