Python 类知识详解
类的定义语法
class 类名:
# 类体(属性、方法)
示例:
class Person:
pass
创建类的实例(对象)
p = Person() # 创建一个类的对象(实例)
类的构造方法(__init__
)
__init__
是类的构造函数,在实例化对象时自动调用,用于初始化属性。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
示例:
p = Person("Alice", 25)
print(p.name) # 输出: Alice
类的属性
实例属性(对象属性)
在 __init__
中使用 self
创建:
class Dog:
def __init__(self, name):
self.name = name # 实例属性
类属性(所有实例共享)
类属性写在类体中,属于类本身:
class Dog:
species = "Canine" # 类属性
def __init__(self, name):
self.name = name
print(Dog.species) # Canine
dog1 = Dog("Buddy")
print(dog1.species) # Canine
类中的方法
实例方法(最常见,操作实例)
class Student:
def __init__(self, name):
self.name = name
def greet(self):
print(f"Hello, my name is {self.name}")
类方法(使用 @classmethod 装饰)
作用于类本身,常用于创建工厂方法。
class Person:
count = 0
def __init__(self, name):
self.name = name
Person.count += 1
@classmethod
def get_count(cls):
return cls.count
静态方法(使用 @staticmethod 装饰)
不操作实例和类,用于工具函数。
class MathUtils:
@staticmethod
def add(a, b):
return a + b
私有属性与私有方法
Python 没有真正的“私有”,但约定通过**前置双下划线 __
**表示“私有”。
私有属性
class Car:
def __init__(self, brand):
self.__brand = brand # 私有属性
def get_brand(self):
return self.__brand
私有方法
class Car:
def __init__(self, brand):
self.__brand = brand
def start(self):
self.__engine_check()
def __engine_check(self): # 私有方法
print("Engine OK")
私有属性/方法不能直接通过对象访问(如
car.__brand
报错),但可以通过方法间接访问。
注意事项
注意点 | 说明 |
---|---|
self 必须在实例方法中第一个参数 | 表示当前实例 |
Python 中没有强制私有,仅有命名约定 | 使用 __name 形式 |
类属性共享,实例属性独立 | 修改实例属性不会影响类属性 |
类的继承与多态也很重要 | (可另开话题详细讲) |
综合示例
class Employee:
company = "OpenAI" # 类属性
def __init__(self, name, salary):
self.name = name # 实例属性
self.__salary = salary # 私有属性
def show_info(self): # 实例方法
print(f"Name: {self.name}, Salary: {self.__salary}")
def __secret_method(self): # 私有方法
print("This is private.")
@classmethod
def get_company(cls): # 类方法
return cls.company
@staticmethod
def say_hello(): # 静态方法
print("Hello from Employee!")
e = Employee("John", 8000)
e.show_info()
print(Employee.get_company())
Employee.say_hello()
小结表格
分类 | 修饰符 | 调用方式 | 操作对象 |
---|---|---|---|
实例方法 | def method(self) | 实例.方法() | 当前对象实例 |
类方法 | @classmethod | 类.方法() 或 实例.方法() | 当前类(cls ) |
静态方法 | @staticmethod | 同上 | 无依赖 |
私有属性 | __name | 仅类内访问 | 当前实例 |
私有方法 | __method() | 仅类内调用 | 当前实例 |