只有一个页面的网站怎么做甜品售卖网站网页设计
2026/5/14 5:58:14 网站建设 项目流程
只有一个页面的网站怎么做,甜品售卖网站网页设计,android开发app的详细过程,微信公众号制作网站有哪些第1章#xff1a;OOP思想与初识类与对象 章节介绍 想象一下#xff0c;你需要写一个程序来管理一个班级的学生信息。每个学生都有名字、年龄和学号。一开始#xff0c;你可能会创建几个独立的列表来分别存放这些信息。 names [小明, 小红] ages […第1章OOP思想与初识类与对象章节介绍想象一下你需要写一个程序来管理一个班级的学生信息。每个学生都有名字、年龄和学号。一开始你可能会创建几个独立的列表来分别存放这些信息。names[小明,小红]ages[18,17]student_ids[S001,S002]这样做似乎可行但问题很快就来了。如果你想查找“小红”的年龄和学号你必须在names列表里找到她的位置然后再去另外两个列表的相同位置获取数据。如果要添加或删除一个学生你必须小心翼翼地同时操作三个列表稍有不慎数据就全乱套了。我们能不能把属于同一个学生的所有信息都“打包”在一起呢当然可以一个简单的字典或许是个选择。student1{name:小明,age:18,student_id:S001}这比分开的列表好多了所有相关信息都放在了一个“包裹”里。但是新的需求又来了我们需要确保每个学生的年龄是合理的比如在5到80岁之间或者需要计算学生的出生年份。这些操作逻辑散落在程序各处和学生的数据本身是分离的。有没有一种更聪明、更系统的组织方式能把描述某个事物的“数据”和与它相关的“行为”都整合成一个整体呢这就是面向对象编程OOP的核心思想。OOP将程序看作是由一个个“对象”组成的。每个对象就像一个独立的小机器它既有自己的状态我们称之为属性也有自己能执行的操作我们称之为方法。在刚才的例子中“学生”就是一个绝佳的对象候选。为了批量制造具有相同结构的“学生”对象我们需要一个模板这个模板在OOP中叫做类。你可以把“类”想象成建筑图纸而“对象”就是根据这张图纸建造出来的、一栋栋具体的房子。比如我们可以定义一个Student类规定每个学生对象都应该有name、age、student_id这些属性。根据这张图纸我们可以创建具体的学生“小明”和“小红”。创建一个具体的对象我们称之为“实例化”。这个过程在代码里通常是直接调用类名就像调用一个函数。例如要创建一个名叫小明的学生可以这样做defcreateStudent(name:str,age:int,student_id:strNone)-object: 根据提供的属性创建一个学生对象。 参数: name (str): 学生的姓名。 age (int): 学生的年龄。 student_id (str, 可选): 学生的学号。默认为None将由类自动生成。 返回: Student: 一个Student类的实例对象。 classStudent:# 类变量用于自动生成学号_id_counter1000def__init__(self,name,age,student_idNone): 构造函数初始化方法。当创建对象时自动调用。 用于初始化对象的属性实例变量。 # 实例变量每个对象独有的数据self.namename self.ageageifstudent_idisNone:# 如果未提供学号则自动生成Student._id_counter1self.student_idfSID{Student._id_counter}else:self.student_idstudent_iddefintroduce(self):一个实例方法用于对象进行自我介绍。returnf大家好我叫{self.name}今年{self.age}岁我的学号是{self.student_id}。defstudy(self,subject):一个实例方法表示学生学习某门课程。returnf{self.name}正在学习《{subject}》。# 类方法操作类变量的方法classmethoddefget_total_id_counter(cls):返回当前学号生成器的值。returncls._id_counter# 创建并返回Student对象returnStudent(name,age,student_id)这个createStudent函数内部就封装了创建Student类实例的逻辑它返回了一个实实在在的、拥有具体姓名的学生对象。拥有了对象我们当然希望它能“做”些什么。比如检查这个学生的年龄是否在合理范围内。这个检查逻辑不应该游离在外而是应该被“封装”在学生对象内部成为它的一个能力也就是一个“方法”。这样一来任何需要检查年龄的地方我们直接让这个学生对象自己来检查就行了。defvalidateStudentAge(age:int)-bool: 验证学生年龄的合理性。 参数: age (int): 待验证的年龄。 返回: bool: 如果年龄在合理范围内5-80岁则返回True否则返回False。 MIN_AGE5MAX_AGE80returnMIN_AGEageMAX_AGEvalidateStudentAge函数展示的正是这种思想。在实际的类定义中它可以被定义为Student类的一个方法比如student.is_age_valid()。调用这个方法对象就会使用自己内部的age属性来完成验证。现在我们的代码结构变得清晰多了数据属性和行为方法被统一封装在“学生”这个对象里。我们不再需要维护一堆零散的列表也不再需要到处去寻找处理学生数据的函数。一切围绕着“对象”来思考和编程这就是面向对象思想的起点。核心概念让我们从身边的事物说起。你正在使用的手机阅读的这段文字甚至你脑海中关于“学生”的认知——这些都是对象。在编程的世界里面向对象编程让我们以同样的方式思考和构建代码将数据和操作数据的方法捆绑在一起形成一个独立的、可复用的单元。什么是对象呢想象一个具体的学生比如张三。他有名字“张三”年龄18岁学号“S001”。他能进行一些行为比如学习、参加考试。这里的“张三”就是一个对象他的姓名、年龄、学号是属性学习、考试是他的方法。那么什么是类呢类是创建对象的蓝图或模板。它不是指某个具体的学生而是定义了“学生”这个群体应该具有的共同特征和行为。比如每个学生都有姓名和年龄每个学生都能学习。我们先看看如何定义一个简单的“学生”类classStudent: 学生类表示一个学生对象 包含学生的基本属性和行为 # 类属性用于自动生成学号_next_id1def__init__(self,name:str,age:int,student_id:strNone): 初始化学生对象 参数: name (str): 学生姓名 age (int): 学生年龄 student_id (str, 可选): 学生学号默认为None会自动生成 # 验证姓名是否为字符串ifnotisinstance(name,str):raiseTypeError(姓名必须是字符串类型)# 验证年龄是否为整数ifnotisinstance(age,int):raiseTypeError(年龄必须是整数类型)# 验证年龄是否合理ifage0orage150:raiseValueError(年龄必须在0-150之间)# 设置实例属性self.namename# 学生姓名self.ageage# 学生年龄# 处理学号如果未提供则自动生成ifstudent_idisNone:# 使用类属性生成学号self.student_idfS{Student._next_id:03d}Student._next_id1else:# 使用提供的学号ifnotisinstance(student_id,str):raiseTypeError(学号必须是字符串类型)self.student_idstudent_iddefintroduce(self)-str: 学生自我介绍的方法 返回: str: 包含学生信息的自我介绍字符串 returnf大家好我叫{self.name}今年{self.age}岁我的学号是{self.student_id}defstudy(self,subject:str)-str: 学生学习的方法 参数: subject (str): 学习的科目 返回: str: 表示学习行为的信息 returnf{self.name}正在学习{subject}defcreate_student(name:str,age:int,student_id:strNone)-Student: 根据提供的属性创建一个学生对象 参数: name (str): 学生的姓名 age (int): 学生的年龄 student_id (str, 可选): 学生的学号默认为None将由类自动生成 返回: Student: 一个Student类的实例对象 # 创建并返回学生对象returnStudent(name,age,student_id)# 示例使用if__name____main__:# 创建第一个学生对象自动生成学号student1create_student(张三,18)print(student1.introduce())print(student1.study(数学))# 创建第二个学生对象指定学号student2create_student(李华,20,S2024001)print(student2.introduce())# 创建第三个学生对象自动生成学号student3create_student(王五,19)print(student3.introduce())在这个Student类中__init__是一个特殊的方法称为构造方法。当我们根据这张蓝图创建一个具体的学生时它会自动被调用为这个新生对象设置初始状态。name和age是实例属性它们属于由类创建的每一个独立对象。introduce则是一个实例方法描述了对象可以执行的动作。现在蓝图有了我们该如何根据它创造出一个个活生生的“学生”对象呢这个过程叫做实例化。比如我们想创建一名叫李华20岁的学生。defcreateStudent(name:str,age:int,student_id:strNone)-object: 根据提供的属性创建一个学生对象。 参数: name (str): 学生的姓名。 age (int): 学生的年龄。 student_id (str, 可选): 学生的学号。默认为None将由类自动生成。 返回: Student: 一个Student类的实例对象。 classStudent:# 类变量用于自动生成学号_id_counter1000def__init__(self,name,age,student_idNone): 构造函数初始化方法。当创建对象时自动调用。 用于初始化对象的属性实例变量。 # 实例变量每个对象独有的数据self.namename self.ageageifstudent_idisNone:# 如果未提供学号则自动生成Student._id_counter1self.student_idfSID{Student._id_counter}else:self.student_idstudent_iddefintroduce(self):一个实例方法用于对象进行自我介绍。returnf大家好我叫{self.name}今年{self.age}岁我的学号是{self.student_id}。defstudy(self,subject):一个实例方法表示学生学习某门课程。returnf{self.name}正在学习《{subject}》。# 类方法操作类变量的方法classmethoddefget_total_id_counter(cls):返回当前学号生成器的值。returncls._id_counter# 创建并返回Student对象returnStudent(name,age,student_id)调用createStudent(李华, 20)就完成了实例化。它背后执行的操作本质上等同于Student(李华, 20)。这个调用触发了类中的__init__方法诞生了一个独立的Student对象并赋予了它初始的属性值。现在我们有了一个代表“李华”的具体对象他可以调用introduce方法介绍自己。我们为何要把数据属性和功能方法打包在一起这引出了面向对象一个核心思想封装。封装意味着将对象的内部细节隐藏起来只通过一个明确的接口即对象的方法与外部进行交互。比如对于“年龄”这个属性我们可能有一些业务规则学生的年龄应该在一个合理范围内。如果允许外部代码直接修改age属性就可能产生无效数据比如-5岁。更好的做法是将对年龄的修改和验证逻辑封装在类内部。defvalidateStudentAge(age:int)-bool: 验证学生年龄的合理性。 参数: age (int): 待验证的年龄。 返回: bool: 如果年龄在合理范围内5-80岁则返回True否则返回False。 MIN_AGE5MAX_AGE80returnMIN_AGEageMAX_AGEvalidateStudentAge函数体现了这种验证逻辑。在一个设计良好的Student类中我们可能会在设置年龄的方法中整合这样的检查确保每个学生对象的年龄数据始终是有效的。外部代码只需要告诉对象“请将年龄设置为25岁”而无需关心对象内部是如何检查和存储这个值的。这保护了数据的完整性也让代码更易于维护和理解。所以类和对象为我们提供了一种强大的组织代码的方式。通过定义类我们规划了数据和行为的结构通过创建对象我们得到了可以独立操作和交互的实体。封装则保证了每个对象的内部稳定与安全。这就是面向对象编程的起点一种更贴近我们自然思维模式的编程范式。实践应用理解了类的基本概念后我们来看看如何将它应用到实际编程中。想象一下如果你要开发一个学生管理系统需要处理大量学生的信息。每个学生都有名字、年龄、学号可能还需要完成一些动作比如问候和选课。如果不用类你可能会用一堆独立的变量或者字典来存这些数据代码很快就会变得难以管理和维护。面向对象的思想就是把“学生”这个事物当作一个整体来对待。我们可以定义一个Student类它就是这个事物的蓝图。在这张蓝图里我们规定每个“学生”对象都应该有的属性name名字、age年龄、student_id学号。同时我们还可以定义一些方法比如greet()方法让学生做自我介绍study(course_name)方法表示学生在学习某门课程。类的定义只是第一步它就像一张设计图纸。要真正用起来我们需要根据这张图纸“生产”出具体的产品也就是创建对象。这个过程叫做“实例化”。假设我们已经有了一个Student类那么创建一个具体的学生对象就非常简单了。我们可以调用一个专门的函数来完成初始化和设置工作defcreateStudent(name:str,age:int,student_id:strNone)-object: 根据提供的属性创建一个学生对象。 参数: name (str): 学生的姓名。 age (int): 学生的年龄。 student_id (str, 可选): 学生的学号。默认为None将由类自动生成。 返回: Student: 一个Student类的实例对象。 classStudent:# 类变量用于自动生成学号_id_counter1000def__init__(self,name,age,student_idNone): 构造函数初始化方法。当创建对象时自动调用。 用于初始化对象的属性实例变量。 # 实例变量每个对象独有的数据self.namename self.ageageifstudent_idisNone:# 如果未提供学号则自动生成Student._id_counter1self.student_idfSID{Student._id_counter}else:self.student_idstudent_iddefintroduce(self):一个实例方法用于对象进行自我介绍。returnf大家好我叫{self.name}今年{self.age}岁我的学号是{self.student_id}。defstudy(self,subject):一个实例方法表示学生学习某门课程。returnf{self.name}正在学习《{subject}》。# 类方法操作类变量的方法classmethoddefget_total_id_counter(cls):返回当前学号生成器的值。returncls._id_counter# 创建并返回Student对象returnStudent(name,age,student_id)通过这样一行代码student1 createStudent(小明, 18, S001)我们就得到了一个名为student1的实实在在的对象。它内部已经存储了“小明”、18和“S001”这些数据。现在我们可以通过student1.name来获取他的名字或者调用student1.greet()让他打个招呼。在创建对象时确保数据的有效性至关重要。比如一个学生的年龄输入为-5或200显然是不合理的。这种数据验证的逻辑也应该被封装起来。我们可以在创建对象时自动进行验证确保对象的属性是健康、可用的。defvalidateStudentAge(age:int)-bool: 验证学生年龄的合理性。 参数: age (int): 待验证的年龄。 返回: bool: 如果年龄在合理范围内5-80岁则返回True否则返回False。 MIN_AGE5MAX_AGE80returnMIN_AGEageMAX_AGE这个函数可以在createStudent函数内部被调用用于检查传入的年龄参数。如果年龄无效可以选择抛出一个错误或者赋予一个默认的合理值。这就是将数据和操作数据的行为绑定在一起的魅力——你可以在一个地方控制所有的规则。所以从想法到代码的路径很清晰首先从具体需求中抽象出“类”定义好它的属性和方法。然后在程序中通过实例化来创建一个个“对象”它们是类这个模子刻出来的、活生生的实体。最后通过操作这些对象的属性和调用它们的方法来完成我们需要的功能。这就是面向对象编程最核心的实践方式。章节总结当你开始用Python写越来越多的程序可能会发现一些代码模式在不断重复。比如处理学生信息时你总有名字、年龄、学号这几个数据并且总需要对它们进行类似的检查或操作。把这些分散的变量和函数组合成一个统一的、可复用的“单元”的想法就是面向对象编程OOP的起点。OOP的核心思想叫做“封装”。它建议我们把紧密相关的数据属性和操作这些数据的函数方法捆绑在一起。这个捆绑好的“包裹”或“蓝图”在Python里就叫“类”(Class)。你可以把“类”想象成制造汽车的蓝图。这张蓝图详细规定了汽车应该有的部件比如车轮、发动机、颜色和它能执行的动作比如启动、加速、刹车。但它本身不是一辆可以开的车。根据蓝图制造出来的、真实存在的、可以驾驶的那一辆辆具体的汽车就是“对象”(Object)也叫“实例”。例如蓝图是“学生类”而根据这个类创建出来的“张三”就是一个具体的“学生对象”。创建对象的过程称为“实例化”。这个过程通常由一个叫做__init__的特殊方法构造函数来完成它为这个新对象设置初始状态。defcreateStudent(name:str,age:int,student_id:strNone)-object: 根据提供的属性创建一个学生对象。 参数: name (str): 学生的姓名。 age (int): 学生的年龄。 student_id (str, 可选): 学生的学号。默认为None将由类自动生成。 返回: Student: 一个Student类的实例对象。 classStudent:# 类变量用于自动生成学号_id_counter1000def__init__(self,name,age,student_idNone): 构造函数初始化方法。当创建对象时自动调用。 用于初始化对象的属性实例变量。 # 实例变量每个对象独有的数据self.namename self.ageageifstudent_idisNone:# 如果未提供学号则自动生成Student._id_counter1self.student_idfSID{Student._id_counter}else:self.student_idstudent_iddefintroduce(self):一个实例方法用于对象进行自我介绍。returnf大家好我叫{self.name}今年{self.age}岁我的学号是{self.student_id}。defstudy(self,subject):一个实例方法表示学生学习某门课程。returnf{self.name}正在学习《{subject}》。# 类方法操作类变量的方法classmethoddefget_total_id_counter(cls):返回当前学号生成器的值。returncls._id_counter# 创建并返回Student对象returnStudent(name,age,student_id)这个函数createStudent展示的就是根据“学生”这个蓝图创建具体学生对象的过程。你提供了姓名、年龄等“零件”它就为你组装出一个可用的“学生”。类不仅仅是数据的容器它还能定义行为也就是“方法”。方法是属于类的函数它们知道如何操作该类对象内部的数据。defvalidateStudentAge(age:int)-bool: 验证学生年龄的合理性。 参数: age (int): 待验证的年龄。 返回: bool: 如果年龄在合理范围内5-80岁则返回True否则返回False。 MIN_AGE5MAX_AGE80returnMIN_AGEageMAX_AGEvalidateStudentAge这个函数如果被设计成“学生类”的一个方法就会非常自然。因为它要操作和验证的数据年龄正是学生对象的一部分。这样相关的数据和逻辑就被整洁地组织在同一个地方了。所以总结一下这几块拼图类是定义属性和方法的蓝图对象是根据这个蓝图创建的具体实体实例化是创建对象的过程而方法则是定义在类内部、用于操作对象数据的函数。把数据和围绕数据的操作封装进类你的代码就开始从一长串指令的集合演变为一个个职责明确、边界清晰、易于理解和复用的模块。这就是面向对象编程为你构建复杂程序所提供的基本工具。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询