超详细!Python 类 Class--详细整理

本文详细介绍了Python的类,包括类的创建和实例化、属性(实例属性、类属性、公有属性和私有属性)、方法(实例方法、类方法和静态方法)以及继承、多态等核心概念。文章通过实例展示了如何定义和使用类、属性和方法,并探讨了类的继承和多态性在Python编程中的应用。此外,还讨论了如何通过`__init__`构造函数初始化实例,以及如何通过`super()`函数调用父类方法。最后,文章强调了多态在提高代码灵活性和可扩展性方面的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 类

在这里插入图片描述

1 类的创建和类的实例

Python 是一种面向对象的编程语言,其中类是非常重要的概念。

是一种用户定义的数据类型,它代表着一类具有相同属性和方法的对象的集合。

实例则是类的具体实现,是类的一个个体,可以使用类定义的属性和方法。

  1. 定义类:使用关键字 class
  2. 创建一个类的对象:可以通过类名后面加括号来创建一个实例
  • __init__() 作为类的构造方法,用来初始化类的实例,
  • self 表示类的实例本身。
    • self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定使用 self
  • 其他方法则按照正常函数的形式定义。
  • 类可以定义属性和方法,属性是类的数据成员,方法是类的函数成员。
  • 类的方法与普通的函数只有一个特别的区别:它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
class Dog:
    def __init__(self, name, breed, age):
        self.name = name
        self.breed = breed
        self.age = age

my_dog = Dog('Buddy', 'Golden Retriever', 6)

上面的代码中,“Dog”类表示狗类,它包含名字、品种和年龄这三个属性。

创建了一个 “my_dog” 的实例,该实例有名为 “Buddy” 的名字、品种为 “Golden Retriever”、年龄为 6 岁。

此时,my_dog 变量就代表了一个狗类的实例,可以通过访问它的属性来获取相应的信息,例如:

print(my_dog.age)

这将打印出 6。同时,也可以使用对象的方法来修改属性或进行其他操作:

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

    def bark(self):
        print('Woof woof!')

my_dog = Dog('Buddy', 'Golden Retriever', 6)

my_dog.bark()  # 输出 “Woof woof!”

2 类的属性

在 Python 中,类的属性可以被理解为类的变量。

Python 的公有属性、私有属性以及实例属性、静态属性之间是存在关联的,具体关系如下:

  • 公有属性:指没有加前缀双下划线__的属性,可以在类内外被访问,也可以被继承和重写。

  • 私有属性:指加了前缀双下划线__的属性,只能在类内被访问和修改,而在类外部无法访问或修改。

  • 实例属性:指定义在 __init__ 方法中,以 self.属性名 的形式定义的属性,每个实例都独立拥有一个自己的实例属性,它们随实例创建和销毁。

  • 静态属性:指在类下直接定义的属性,可以使用类名直接访问,它们是类的属性,每个实例都共享一个静态属性。

公有属性和私有属性是属于对象或类中的实例属性或静态属性的一种访问方式,

也就是说,公有属性和私有属性可以同时作为实例属性和静态属性存在。

对于 Python 中的公有属性和实例属性的关系,可以通过实例的 self.属性名 来访问和修改;

而对于 Python 中的私有属性,则需要在属性名前面加上双下划线"__",才能被认定为私有属性,无法通过实例调用,只能通过类内部的方法进行访问和修改。对于静态属性,则是直接定义在类下,可以使用类名进行访问和修改。

2.1 实例属性和类属性

类的属性有两种类型:实例属性和类属性。

类型 定义 特点
实例属性 类的实例的属性 各个实例相互之间不产生影响
静态属性/类属性 类本身的属性 类的所有实例都共享一份类属性,各个实例相互之间会产生影响
属性 实例属性 静态属性
定义方式和作用 定义在实例方法中,仅对当前实例有效 定义在类中,对所有实例共享同一份
访问方式 通过实例进行访问 通过类名进行访问
访问时用的是哪个对象属性 实例属性值 只有一个静态属性值,共用同一个
生命周期 随着实例的创建和销毁而创建和销毁 随着类的创建和销毁而创建和销毁
作用域 实例内部作用域内 类的内部作用域内
示例 self.name = '张三' (在 init 中) name = '李四' (在类中)

2.1.1 实例属性

实例属性是指属于某个对象的属性,每个对象都有自己独立的实例属性,相互之间不会产生影响。

实例属性的赋值一般在类的初始化方法 __init__ 中进行,也可以在对象创建之后通过赋值来添加实例属性。

例如,我们定义一个人类 Person,可以在初始化方法中定义实例属性 nameage,如下所示:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

2.1.2 静态属性/类属性

  • 类属性是指属于整个类的属性,所有对象共享一份类属性,相互之间会产生影响。
  • 类属性一般在类的定义中直接定义,也可以在类的其他方法中添加。
  • 类的属性是反映类内部状态的变量,可以在类的定义中定义和修改,也可以在类的其他方法中访问和使用。
  • 理解好类的属性对于深入理解 Python 面向对象编程非常重要。

例如,我们为人类 Person 添加一个类属性 species,表示人类的种类,定义如下:

class Person:
    species = 'human'  # 定义类属性

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_species(self):  # 定义实例方法
        return self.species

  1. 在类属性的访问和修改上,可以通过类名或对象名来访问。

例如,我们可以通过 Person.species 来访问类属性,也可以通过 person1.species 来访问对象 person1 的类属性。

  1. 类属性的修改同样可以通过类名或对象名来实现。

如果通过对象名修改类属性,则会创建一个同名的实例属性,该实例属性会覆盖掉类属性的值,不会改变类属性的值。

例如,我们修改 person1.species 的值为 'homo erectus',则会创建一个实例属性 species,它的值为 'homo erectus',但是不会改变类属性 Person.species 的值。

2.2 公有属性和私有属性

在 Python 中,类的属性(或者成员变量)也可以分为公有属性和私有属性。

属性类型 声明方式 外部访问方式 内部访问方式
公有属性 未加任何修饰符 直接访问 直接访问
私有属性 在属性名前面加双下划线 __ 不能直接访问,可以通过访问方法间接访问 可以直接访问

2.2.1 公有属性

公有属性是指可以从类的外部直接访问和修改的属性,一般在类的构造方法中用 self 关键字来定义,例如:

class Student:
    def __init__(self, name, age):
        self.name = name  # 公有属性
        self.age = age  # 公有属性

在这个例子中,nameage 都是公有属性,我们可以通过实例对象直接访问和修改它们的值:

s = Student('Lucy', 20)
print(s.name)  # 'Lucy'
s.age = 21
print(s.age)  # 21

2.2.2 私有属性

私有属性是指不能从类的外部直接访问和修改的属性。在 Python 中,可以通过在属性名前面加上双下划线 __ 来定义私有属性,例如:

class Student:
    def __init__(self, name, age):
        self.__name = name  # 私有属性
        self.__age = age  # 私有属性

在这个例子中,__name__age 都是私有属性,我们无法直接访问和修改它们的值:

s = Student('Lucy', 20)
print(s.__name)  # AttributeError: 'Student' object has no attribute '__name'
s.__age = 21  # AttributeError: 'Student' object has no attribute '__age'

这是因为 Python 解释器会自动将属性名 __name__age 替换成 _Student__name_Student__age,从而防止属性被意外访问和修改。

虽然无法直接访问和修改私有属性,但是我们可以通过类内部定义的方法来访问和修改它们的值,例如:

class Student:
    def __init__(self, name, age):
        self.__name = name  # 私有属性
        self.__age = age  # 私有属性

<think>嗯,用户想找scikit-learn的详细使用教程、示例以及机器学习相关的Python教程。首先,我需要整理一下现有的引用内容。根据提供的引用,scikit-learn是一个基于Python的机器学习库,建立在NumPy、SciPy和Matplotlib之上,用于分、回归、聚等任务,并且有简洁的API接口和丰富的文档[^2]。安装方法是通过pip安装,命令是`pip install scikit-learn`[^3][^1]。 用户可能需要从基础开始,逐步学习如何使用这个库。首先应该确认安装是否正确,然后按照机器学习的一般流程来介绍:数据预处理、模型训练、评估、调参等。同时需要提供一些示例代码,比如数据加载、划分数据集、训练模型、评估性能等步骤。 另外,用户可能需要具体的示例,比如分任务中的鸢尾花数据集,回归任务中的波士顿房价数据集,或者聚中的K-means算法。这些示例能够帮助用户快速上手。 还要考虑到用户可能对模型调参和优化感兴趣,所以需要提到网格搜索和交叉验证,这些在scikit-learn中都有现成的模块,比如GridSearchCV。 可能还需要推荐一些学习资源,如官方文档、在线课程、书籍等,帮助用户深入学习。同时,注意事项部分可以提醒用户数据预处理的重要性,样本量的问题,以及版本兼容性等。 需要确保回答结构清晰,分步骤讲解,代码示例正确且符合语法,使用中文,并且正确引用提供的参考资料。可能还需要生成相关问题,比如安装问题、算法选择、模型保存等,这些问题都是用户在学习过程中可能遇到的后续问题。 最后检查是否符合系统级指令,比如数学公式的格式是否正确,独立公式是否用$$,LaTeX语法正确,引用标识正确添加。同时,用户可见层需要回答结构清晰,真实可靠,帮助用户一步步解决问题。</think># Scikit-learn使用指南与教程 ### 一、基础使用流程 1. **安装验证** ```python import sklearn print(f"当前版本:{sklearn.__version__}") # 需≥0.24版本支持最新功能 ``` 2. **标准建模流程** ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC # 数据加载与处理 data = load_iris() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2) scaler = StandardScaler().fit(X_train) X_train_scaled = scaler.transform(X_train) # 模型训练与预测 model = SVC(kernel='rbf', C=1.0) model.fit(X_train_scaled, y_train) accuracy = model.score(scaler.transform(X_test), y_test) print(f"测试准确率:{accuracy:.2%}") ``` ### 二、核心功能模块 | 模块别 | 主要功能 | 典型/函数 | |----------------|----------------------------|----------------------------| | 数据预处理 | 标准化/归一化/编码 | `StandardScaler`, `OneHotEncoder` | | 模型选择 | 交叉验证/参数调优 | `GridSearchCV`, `train_test_split` | | 监督学习 | 分/回归 | `LinearRegression`, `RandomForestClassifier` | | 无监督学习 | 聚/降维 | `KMeans`, `PCA` | | 模型评估 | 指标计算/学习曲线 | `classification_report`, `roc_auc_score` | ### 三、实战示例 1. **分任务(鸢尾花数据集)** ```python from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import confusion_matrix clf = DecisionTreeClassifier(max_depth=3) clf.fit(X_train, y_train) y_pred = clf.predict(X_test) print("混淆矩阵:\n", confusion_matrix(y_test, y_pred)) ``` 2. **回归任务(波士顿房价)** ```python from sklearn.datasets import fetch_california_housing from sklearn.linear_model import Ridge housing = fetch_california_housing() X, y = housing.data, housing.target model = Ridge(alpha=1.0).fit(X, y) print(f"R²得分:{model.score(X, y):.3f}") ``` 3. **聚分析(K-means)** ```python from sklearn.cluster import KMeans import matplotlib.pyplot as plt kmeans = KMeans(n_clusters=3).fit(X_train) plt.scatter(X_train[:,0], X_train[:,1], c=kmeans.labels_) plt.show() ``` ### 四、高级技巧 1. **管道操作(Pipeline)** ```python from sklearn.pipeline import make_pipeline from sklearn.decomposition import PCA pipeline = make_pipeline( StandardScaler(), PCA(n_components=2), SVC(kernel='poly') ) pipeline.fit(X_train, y_train) ``` 2. **超参数调优** ```python from sklearn.model_selection import GridSearchCV params = {'C': [0.1, 1, 10], 'gamma': [1, 0.1, 0.01]} grid = GridSearchCV(SVC(), params, cv=5) grid.fit(X_train_scaled, y_train) print(f"最佳参数:{grid.best_params_}") ``` ### 五、学习资源推荐 1. **官方文档**:[scikit-learn中文文档](https://scikit-learn.org.cn/) 2. **实战课程**:Kaggle的[Scikit-learn微课程](https://www.kaggle.com/learn/scikit-learn) 3. **经典书籍**:《Python机器学习基础教程》(中译本) ### 注意事项 1. 数据预处理阶段需确保训练集与测试集的scaler独立应用 2. 别不平衡数据集建议使用`class_weight`参数或`SMOTE`方法 3. 大数据集(>10万样本)建议使用`SGDClassifier`等增量学习模型
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值