类(Class)
类是一个模板或蓝图,用于定义对象的结构和行为。它包括数据成员(属性)和方法(函数),描述了对象的特性和操作。类是一种自定义数据类型,允许你创建多个具有相同属性和方法的对象。
类的基本结构如下:
class ClassName:
# 属性
attribute1 = value1
attribute2 = value2
# 方法
def method1(self, parameter1, parameter2):
# 方法的操作
pass
对象(Object)
对象是类的实例,是根据类创建的具体实体。对象具有类定义的属性和方法,可以执行类中定义的操作。每个对象都是独立的,可以具有不同的属性值。
创建对象的基本语法如下:
object_name = ClassName()
示例:
# 定义一个类
class Dog:
# 构造方法
def __init__(self, name, age):
self.name = name
self.age = age
# 方法
def bark(self):
print(f"{self.name}在汪汪叫!")
# 创建两个对象
dog1 = Dog("旺财", 3)
dog2 = Dog("小白", 2)
# 调用对象的方法
dog1.bark() # 输出:旺财在汪汪叫!
dog2.bark() # 输出:小白在汪汪叫!
类的属性和方法
类的属性(成员变量)存储对象的状态信息,可以通过点号访问。每个对象都有自己的属性副本。
类的方法(成员函数)定义对象的行为,操作属性和执行任务。方法可以接受参数,并在方法内部使用。
构造方法 __init__()
构造方法是一个特殊的方法,用于在对象创建时进行初始化操作。它在类的实例化过程中自动调用,并可用于设置对象的初始状态。
示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 30)
封装
封装是面向对象编程的一个原则,它指的是将类的内部数据和方法封装在类内部,通过公有接口(属性和方法)与外部世界交互。封装提供了数据隐藏和访问控制,防止外部直接访问对象的内部状态。
公有属性和方法:可以从外部访问。
私有属性和方法:不应该从外部访问,通常以双下划线
__
开头。
示例:
class BankAccount:
def __init__(self, account_number):
self.__account_number = account_number # 私有属性
def get_account_number(self): # 公有方法
return self.__account_number
account = BankAccount("12345")
number = account.get_account_number() # 调用公有方法
__account_number
是一个私有属性,只能通过公有方法get_account_number()
来访问
class MyClass:
def __init__(self):
self.__my_private_variable = 10 # 私有属性
def my_public_method(self):
print("这是一个公有方法")
self.__my_private_method() # 在公有方法中调用私有方法
def __my_private_method(self):
print("这是一个私有方法")
obj = MyClass()
obj.my_public_method() # 调用公有方法
# 尝试调用私有方法(会引发 AttributeError)
# obj.__my_private_method()
my_public_method()
是一个公有方法,可以从类的外部调用。而 __my_private_method()
是一个私有方法,不应该从类的外部直接访问。当我们在公有方法中调用私有方法时,它可以正常工作。
从类的外部直接调用私有方法(解除注释最后一行的代码),将引发 AttributeError
异常,因为私有方法不能直接访问。
继承
继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以重用父类的代码,并可以添加自己的属性和方法。
示例:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return f"{self.name}在汪汪叫!"
class Cat(Animal):
def speak(self):
return f"{self.name}在喵喵叫!"
多态
多态是面向对象编程的一个特性,它允许不同类的对象对相同的方法名做出不同的响应。多态可以提高代码的可扩展性和可维护性。
示例:
def animal_sound(animal):
return animal.speak()
dog = Dog("旺财")
cat = Cat("小白")
print(animal_sound(dog)) # 输出:旺财在汪汪叫!
print(animal_sound(cat)) # 输出:小白在喵喵叫!
类和对象是面向对象编程的核心概念,它们允许你模拟现实世界的实体和行为,以创建复杂的程序结构。通过定义类和创建对象,可以更好地模拟和解决复杂的问题。