一、类与对象
1、类的定义
在类的里面,称之为方法。
在类的外面,称之为函数。
类:人类,一个族群,是一个群体
类的语法规则:
class 自定义的类名():
属性 -- 变量
方法 -- 函数
类,首字母大写,拼接的英文不需要隔开,但是每个单词的首字母都需要大写
方法/函数,首字母小写,拼接的英文需要用下划线隔开
1)类里面定义的变量、方法,不能在类的外面引用
2)通过实例化对象,来调用类里面的变量和函数
类名A +() 表示实例化一个对象,对象要有个定义的名字B
所以 对象B = 类名A () 表示,对A类,示例化了一个个体对象B。
也就是对 人类,实例化了一个 对象 叫小王。小王具有人类的属性特征
对学生群体类,实例化了 一个对象,叫大学生,大学生具有学生群体类的属性和特征
实例化 就是 初始化
3)同一个类的对象,都是一样的基本属性
4)通过变量的重定义,来进行对象属性的修改
初始化的时候,不同的对象,属性一致。但是对象有了属性的重定义后,重定义的属性是该对象自己自定义的属性。手机刚出厂,基本设置一样,但是后面每个人都对自己的手机进行自定义,手机就不一样了,但也都是在基本属性之上的改变。
对象中的属性和方法都是没有相互影响的,对C对象的属性重定义,不影响B对象的
2、类的应用
1)构造方法
1、在Python中,构造方法(也称为初始化方法)是一个特殊的方法,用于在创建类的实例时初始化该实例。构造方法的语法规则如下:
构造方法的名称必须是 _ _init_ _ (前后都是双下划线,表示这是一个特殊方法)正常显示会连上,看起来是:__init__
构造方法至少需要有一个参数,通常是 self,它指向新创建的实例本身。
self 参数必须是构造方法的第一个参数。
构造方法可以有任何数量的其他参数,这些参数在创建实例时提供,用于初始化实例的属性。
2、举例:
class MyClass:
def __init__(self, value1, value2):
self.attribute1 = value1
self.attribute2 = value2
# 创建 MyClass 的一个实例,传递两个参数给构造方法
my_instance = MyClass(10, 20)
3、解析上面的例子:
class: 定义类的关键字。
MyClass: 类的名称,可以是任何有效的Python标识符。
__init__: 构造方法的名称,双下划线表示这是一个特殊方法。
self: 指向类实例的引用,在类的方法中始终作为第一个参数传递。
value1, value2: 构造方法的参数,用于接收传递给实例化时的值。
self.attribute1, self.attribute2: 实例属性,使用 self 关键字来设置实例的属性。
在创建类的实例时,Python会自动调用构造方法。构造方法的目的是为了能够定制每个实例的创建过程,为其提供初始状态。
self表示当前对象,传入进来的属性,需要赋值给当前对象的属性
self表示当前对象,给这个对象传入进来的属性,需要赋值给当前对象的属性
2)构造方法的应用
3、类中的属性
1)类属性的定义
实例属性:实例化的对象的属性
定义在构造方法中的属性
公有实例属性:常规属性
私有实例属性:双下划线开头,只能够在自己的类中进行调用
私有属性,是防止被随意的乱改
语法规则:
对象名称.属性名称
类的内部使用:
self.属性名称--self表示当前对象
2)调用公共属性
属性错误:'Person'对象没有属性'self'
正确,不带self
3)调用私有属性
3.1)在类的外面直接调用--报错
属性错误:'Person'对象没有属性'__sex'
3.2)在类的外面,通过类的方法执行在类的里面的私有属性--可以调用
在类的里面,是不区分公有和私有的属性,在类的方法里面可以直接操作类的所有属性
3.3)私有属性在类的外面被重定义,就不再是私有的了
重定义的属性就是该对象自己自定义的属性,属于该对象,重定义后的属性不再是原先的属性
4、类中的方法
1)类方法的定义
方法与函数的主要区别:
1)关联:方法与特定的类实例相关联,而函数是独立的。
2)调用方式:方法通常通过对象调用,如 object.method(),而函数直接通过其名称调用,如 function()。
3)参数:方法至少有一个参数 self,它是对当前对象的引用,而函数没有这样的隐含参数。
4)作用域:方法可以访问其所属对象的属性和其他方法,而函数只能访问全局作用域和其参数中传递的值。
类里面的叫方法,类外面的叫函数。
2)调用公共方法
2)调用私有方法
私有方法不能直接调用
通过调用公共方法来调用私有方法
5、类的封装
1)封装的定义
封装:
1、设置一个方法,可以进行对私有属性的传值
2、可以把私有属性返回,让在类的外面可以操作私有属性
set和get:可以通过定义方法来访问和修改类的属性,从而提供对属性访问的更细粒度的控制。
2)封装的实践
6、类的继承
继承:节约代码的维护量,在原有的基础上面进行迭代维护
语法规则:
class 自定义类名(父类):
子类独有的代码块
在实例化之后,可以调用子类的方法和属性,也可以调用父类的方法和属性
1)单继承
1.1)想使用父类的私有属性,就得对父类进行封装。
1.2)想使用父类的私有方法,就得在父类里增加一个调用私有方法的公共方法。
2)继承的传递性
子类的子类,可以调用父类的属性和方法
3)方法的重构
方法的重构,只运行自己的,不运行父级的方法
4)多继承
"""
语法规则:
class 自定义类名(父类1, 父类2):
其余的内容和之前的没什么区别
"""
4.1)两个父类,都有同名的方法--方法的重构
执行:子类(近父类,远父类)的近的父类的方法
4.2)两个父类和自己,都有同名的方法--方法的重构
自己有的重构的方法,就只执行自己的。如果自己没有这个重构的方法,谁离的近就执行谁的。
7、多态
多态:定一个规则,按照这个规则向接口提供对应的不同的对象。然后根据提供的不同对象,去执行不同对象中的方法
传对象,调用对象里面的属性和方法