精华内容
下载资源
问答
  • 行(一行一个记录record,比如说一行记录某个学生的信息)与列(具体的信息,姓名学号、性别、备注也叫字段Filed)。 每一行就是一个记录。请记住这些英文单词,作为一名数据库开发者。 一行一条信息,...

           一个数据库软件里面好多个数据库(Database)。每个数据库(学生信息库)里面有好多张表(基本信息表、成绩表、宿舍表)。软件->数据库->表格table ->行(一行一个记录record,比如说一行记录某个学生的信息)与列(具体的信息,姓名学号、性别、备注也叫字段Filed)。

    每一行就是一个记录。请记住这些英文单词,作为一名数据库开发者。

    一行一条信息,不允许一模一样的完全一样的行。正常用一个ID作为区分,专业名称叫做主键(PrimaryKey)作为唯一标识。

    编程的时候,要考虑好唯一标识,以ID、学号、身份证之类的。有时候,要知道虽然学号是唯一的,但是如果是一个学生活动记录。看下面的表,学号虽然是唯一,但不是不重复的,永远单一的。
    ID  学号  姓名  做事 

    1   123  小明    打游戏

    2    123  小明   睡觉

    表一

     

    反而 第几条记录(ID),是不可能重复的,可以作为主键。主键不可能为空NULL,可以由数据库自己增加记录(第几条记录)

    主键可以分为业务主键与逻辑主键。

    业务主键与实际业务有关的(身份证,学号)

    逻辑数据随机生成的ID (没有实际意义,但是程序里面使用)

    当然了,有的人会问,我只是记录学生信息,每一个学生就一个行就一个学号,这样学号就能作为主键:

    学号  姓名       入学时间

    123  小明         2018

    456  小宏        2019

    789  小歌        2021

    101 小相         2020

    102 小相          2021

    表二

    这样学号就作为主键作为唯一标着。是的,这是对的。甚至一些情况下有的人两列(名字、入学时间)作为唯一标识。
    这些都是可能的,但是你能预测到未来你新加的记录,一直不可能重复你的想法一直很全面?

    正常将是使用逻辑主键而不使用业务主键。那么业务类型的唯一编号就不存在价值?

    可以作为外键

    看下表一与表二,他们的关联就是学号!

    一:首先是外键的定义

           当有多张表格的时候,表一学号作为表二的外键,作为一张关联,表二是主表学生信息表,表一的从表、学生行为记录表。

    二:主键表和外键表的理解

    (1)以公共关键字作主键的表为主键表(父表,主表)

    (2)以公共关键字作外键的表为外键表(从表,外表)

    学号  姓名       入学时间  做事  奖罚

    123  小明         2018        游戏   一块

    456  小宏        2019        动漫    两块

    789  小歌        2021        视频    三元

    101 小相         2020        看书    四块

    102 小相          2021        睡觉   负一元

     有些人可能回想,把学生信息与行为作为一张表。多简单。

    但是也没有考虑到,没有你要加一条记录,比如说,小明 睡觉 喝水 洗澡,那么你每一行就得加 学号 姓名 奖罚的信息。

    可是一是,这些信息是重复的(姓名,入学时间),而是这些信息可能是没有的(奖罚)。这样对于效率与存储机制来说是愚蠢的,想象一下,一个像腾讯一样的公司,每次登陆一个微信号就得把你的好友信息,朋友圈信息加载,用户量那么大,系统会奔溃的,成本大大增加。 合理的数据库安排表格,对于一名好的程序员来说是至关重要的。 

    这是一种思想,请记住:合理分配唯一ID,分类表格结构。

    关键词:数据库 表 记录 行 列 主键 外键 ID

    下一遍:介绍完数据库基础结构,数据库软件外表长什么样。

     

     

     

     

     

     

     

    展开全文
  • 我有自己的一些理解,可是不晓得是否正确,举个样例来表达我的看法:假如如今须要建立一个表,一个什么样的表呢?一个班级的学生个人信息表:所以在设计的时候。就给表1加入一个外键,这个外键就是表2中的学号字段。...

    我的疑问是 "使用外键约束" ,然后我对 "外键" 这个词不是非常理解。查询相关资料都是讲一些术语。说外键的主要作用是:保持数据的一致性、完整性。听得我是一头雾水。

    关于外键。我有自己的一些理解,可是不晓得是否正确,举个样例来表达我的看法:假如如今须要建立一个表,一个什么样的表呢?一个班级的学生个人信息表:

    6a1635fe08e84cf8e3597113cd7c48c1.png

    所以在设计的时候。就给表1加入一个外键,这个外键就是表2中的学号字段。那么这样表1就是主表,表2就是子表。所以结合2张表就能保持数据的一致性、完整性(预计就是还原成原来的那张大表吧)。

    借着这个样例再谈谈外键的一些事项:

    1、表1能够有一个或者多个外键,也能够没有。(假设表1有多个外键可不能够是这种情况。表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中)

    2、这个外键能够不是表1的主键,但必须是子表的主键。(简单的说就是。假设一个字段是某个表的外键时。那么该字段必须是主键)

    以上就是我个人对外键的理解。

    -------------------------------------解--------答-------------------------------------

    什么是外键

    +-------+   ref   +-------+

    |  sub  | ------> |  main |

    +-------+         +-------+

    从表(sub)的某列引用(ref)主表(main)的某列的值。

    比方学生表有个学生编号(sid),分数表中的学生列(stu)引用学生表的学 生编号,此时对于分数表的 stu 来说。学生表的 sid 就是外键。

    从表也叫外键表,主表也叫主键表、外表,列也叫字段。

    所以在设计的时候。就给表1加入一个外键,这个外键就是表2中的学号字段。那么这样表1就是主表,表2就是子表。

    你的主从关系理解颠倒了。你的图中,表1的确是主表。表2是子表,但不是叫做给表1加入一个外键,而是给表2加入一个外键,表2中的学号 字段就叫外键,它是表1学号字段的主键。

    你能够这样说:表1的学号字段是表2的外键。

    外键用来干什么

    你贴的图片已经解释了。

    为了一张表记录的数据不要太过冗余。这和软件project的模块化思想差点儿相同类似,仅仅只是在数据库中是对表关系进行解耦,尽量让表 记录的数据单一化。就如你贴的图片中,把成绩和学生信息放在一张表中就太冗余了,成绩全然能够以学生的id作为区分标识。

    为什么说外键能保持数据的一致性、完整性

    你想想,你的图中的第一章表切割成了表1和表2,表2的学号引用了表1的学号字段作为外键,假设不建立外键。仅仅是和表1一样单纯性 地设立一个学号字段。那么和建立外键有什么差别呢?

    比方表1中张三的学号为20140900001,那么我在表2中插数据的时候在学号字段插20140900001来记录张三的成绩不也是做到了表 的解耦了吗?

    这里存在的问题是。在不设置外键的情况下。表2的学号字段和表1的学号字段是没有关联的。仅仅是你自己觉得他们有关系而已。数据库并 不觉得它俩有关系。也就是说,你在表2的学号字段插了一个值(比方20140999999),可是这个值在表1中并没有,这个时候,数据库还是允 许你插入的,它并不会对插入的数据做关系检查。然而在设置外键的情况下。你插入表2学号字段的值必需要求在表1的学号字段能找到。

    同一时候。假设你要删除表1的某个学号字段。必须保证表2中没有引用该字段值的列,否则就没法删除。

    这就是所谓的保持数据的一致性和完整性。你想。如 果表2还引用表1的某个学号,你却把表1中的这个学号删了,表2就不知道这个学号相应的学生是哪个学生。

    数据的一致性还包含数据类型的一致性(这 个见以下就知道了)。

    外键的使用规范

    从表的字段必须与外键类型同样(如上。分数表 stu 的类型必须和学生表 sid 的类型同样,比方都是 int(10) 类型)

    外键必须是主表的唯一键(如上。学生表 sid 是主键,而主键是唯一的。所以能够作为分数表 stu 的外键)

    有关联的字段(如上,分数表之所以使用学生表的 sid 是由于两者有关联,分数表记录的是学生的分数,而学生能够用 sid 来唯 一标识)

    避免使用复合键(也就是说从表能够同一时候引用多个外表的字段作为一个外键,一般不推荐这样的做法)

    你的问题

    假设表1有多个外键可不能够是这种情况,表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中。

    都能够。由于表1的外键不一定是表2的主键,也能够是唯一键(UNIQUE)。

    比方表2有个主键 A,有个唯一键 B,表1两个字段 A' 和 B’ 分别引用表2的 A 和 B,这就是多对多的关系了。再或者表2主键 A,表3主键 B,表1的两个字段 A' 和 B' 分别引用表2的 A 和表3 的 B。

    这个外键能够不是表1的主键,但必须是子表的主键。(简单的说就是。假设一个字段是某个表的外键时,那么该字段必须是主键)

    由于你前面就理解错了,所以这句话本身就是错的。对于从表来说,外键不一定须要作为从表的主键,外键也不一定是外表的主键,外表的唯一键就能够作 为从表的外键。

    再给一张图以帮助理解

    6329fee6494dfa08226f2e5e8f580dc9.png

    展开全文
  • 关于外键,我有自己的一些理解,但是不晓得是否正确,举个例子来表达我的看法:假如现在需要建立一个表,一个什么样的表呢?一个班级的学生个人信息表:所以在设计的时候,就给表1添加一个外键,这个外键就是表2中的...

    外键的作用

    外键的主要作用是:保持数据的一致性、完整性。

    关于外键,我有自己的一些理解,但是不晓得是否正确,举个例子来表达我的看法:假如现在需要建立一个表,一个什么样的表呢?一个班级的学生个人信息表:

    20140619085925145.jpg

    所以在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那么这样表1就是主表,表2就是子表。所以结合2张表就能保持数据的一致性、完整性(估计就是还原成原来的那张大表吧)。

    借着这个例子再谈谈外键的一些事项:

    1表1可以有一个或者多个外键,也可以没有。(如果表1有多个外键可不可以是这样的情况,表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中)

    以上就是我个人对外键的理解。

    ----------------------------------------解---答---纠---正-----------------------------------------

    什么是外键

    +-------+ ref +-------+

    | sub | ------> | main |

    +-------+ +-------+

    从表(sub)的某列引用(ref)主表(main)的某列的值。比如学生表有个学生编号(sid),分数表中的学生列(stu)引用学生表的学 生编号,此时对于分数表的 stu 来说,学生表的 sid 就是外键。从表也叫外键表,主表也叫主键表、外表,列也叫字段。

    所以在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那么这样表1就是主表,表2就是子表。

    你的主从关系理解颠倒了。你的图中,表1的确是主表,表2是子表,但不是叫做给表1添加一个外键,而是给表2添加一个外键,表2中的学号 字段就叫外键,它是表1学号字段的主键。你可以这样说:表1的学号字段是表2的外键。

    外键用来干什么

    你贴的图片已经解释了。为了一张表记录的数据不要太过冗余。这和软件工程的模块化思想差不多类似,只不过在数据库中是对表关系进行解耦,尽量让表 记录的数据单一化。就如你贴的图片中,把成绩和学生信息放在一张表中就太冗余了,成绩完全可以以学生的id作为区分标识。

    为什么说外键能保持数据的一致性、完整性

    你想想,你的图中的第一章表分割成了表1和表2,表2的学号引用了表1的学号字段作为外键,如果不建立外键,只是和表1一样单纯性 地设立一个学号字段,那么和建立外键有什么区别呢?

    比如表1中张三的学号为20140900001,那么我在表2中插数据的时候在学号字段插20140900001来记录张三的成绩不也是做到了表 的解耦了吗?

    这里存在的问题是,在不设置外键的情况下,表2的学号字段和表1的学号字段是没有关联的。只是你自己认为他们有关系而已,数据库并 不认为它俩有关系。也就是说,你在表2的学号字段插了一个值(比如20140999999),但是这个值在表1中并没有,这个时候,数据库还是允 许你插入的,它并不会对插入的数据做关系检查。然而在设置外键的情况下,你插入表2学号字段的值必须要求在表1的学号字段能找到。 同时,如果你要删除表1的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。这就是所谓的保持数据的一致性和完整性。你想,如 果表2还引用表1的某个学号,你却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。数据的一致性还包括数据类型的一致性(这 个见下面就知道了)。

    外键的使用规则

    从表的字段必须与外键类型相同(如上,分数表 stu 的类型必须和学生表 sid 的类型相同,比如都是 int(10) 类型)外键必须是主表的唯一键(如上,学生表 sid 是主键,而主键是唯一的,所以可以作为分数表 stu 的外键)有关联的字段(如上,分数表之所以使用学生表的 sid 是因为两者有关联,分数表记录的是学生的分数,而学生可以用 sid 来唯 一标识)避免使用复合键(也就是说从表可以同时引用多个外表的字段作为一个外键,一般不推荐这种做法)

    你的问题

    如果表1有多个外键可不可以是这样的情况,表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中。

    都可以。因为表1的外键不一定是表2的主键,也可以是唯一键(UNIQUE)。比如表2有个主键 A,有个唯一键 B,表1两个字段 A' 和 B’ 分别引用表2的 A 和 B,这就是多对多的关系了。再或者表2主键 A,表3主键 B,表1的两个字段 A' 和 B' 分别引用表2的 A 和表3 的 B。

    外键不一定需要作为从表的主键,外键也不一定是外表的主键,外表的唯一键就可以作 为从表的外键。

    再给一张图以帮助理解

    20140619085926146.jpg

    平常需要使用外键吗?

    数据库的诸多设计,帐号,权限,约束,触发器,都是为 C/S 结构设计的,是以 C 端不可信做为假设前提的。B/S 模式安全边界前移到 web 服务层,应用与数据库之间是可信的,应用自行完成这些功能更加灵活。所以能不用就不用

    1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制,且不能轻易地水平扩展;若是把数据一致性的控制放到事务中,也即让应用服务器承担此部分的压力,而引用服务器一般都是可以做到轻松地水平的伸缩;

    2.数据库服务器的性能不是问题,所以不用过多考虑性能的问题;另外,使用外键可以降低开发成本,借助数据库产品自身的触发器可以实现表与关联表之间的数据一致性和更新;最后一点,使用外键的方式,还可以做到开发人员和数据库设计人员的分工,可以为程序员承担更多的工作量;

    为何说外键有性能问题:

    1.数据库需要维护外键的内部管理;

    2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成;

    3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源;

    4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况;

    展开全文
  • 1、面向对象概述面向对象的编程思想,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系统就存在什么样的实体。例如,在真实世界的学校里,会有学生和老师实体,学生学号、姓名...

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的。

    1、面向对象概述

    面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系统就存在什么样的实体。

    例如,在真实世界的学校里,会有学生和老师实体,学生有学号、姓名、所在班级等属性(数据),学生还有学习、提问、吃饭和走路等操作。学生只是抽象的描述,这个抽象的描述称为“类”。在学校活动的是学生个体,即张同学、李同学等,这些具体的个体称为“对象”,对象也称为“实例”。

    在现实世界有类和对象,软件世界也有面向对象,只不过他们会以某种计算机语言编写的程序代码形式存在,这就是面向对象编程。

    2、面向对象三个基本特性

    面向对象思想有三个基本特性:封装性、继承性和多态性。

    封装性

    面向对象的封装使外部访问者不能随意存取对象的内部数据,隐藏了对象的内部细节,只保留有限的对外接口。外部访问者不需要关心对象的内部细节,操作对象变得简单。

    继承性

    举例,轮船与客船的关系,客船具有轮船的全部特征和行为。

    在面向对象中,轮船是一般类,客船是特殊类,特殊类拥有一般类的全部数据和操作,称为特殊类继承一般类。一般类称为“父类”或“超类”,特殊类称为“子类”或“派生类”。

    多态性

    多态性是指在父类中成员被子类继承之后,可以具有不同的状态或表现行为。

    3、类和对象

    Python中的数据类型都是类,类是组成Python程序的基本要素,它封装了一类对象的数据和操作。

    定义类

    Python语言中一个类的实现包括类定义和类体。

    类定义语法格式如下:

    class 类名 [(父类)]:

    类体

    其中,class是声明类的关键字,“类名”是自定义的类名,应该遵守Python命名规范,采用大驼峰法命名。“父类”声明当前继承的父类,父类可以省略声明,表示直接继承object类。

    演示:

    class Student(object):

    # 类体

    pass

    注意:上述代码声明了一个学生类,它继承了object类,object是所有类的根类,在Python中任何一个类都直接或间接的继承object,所以(object)部分代码可以省略。

    pass语句什么操作都不执行,用来维持程序结构的完整,进行占位。

    创建和使用对象

    一个对象的生命周期包括三个阶段:创建、使用和销毁。销毁对象时Python的垃圾回收机制释放不再使用的内存,不需要程序员负责。程序员只需关心创建和使用对象。

    创建对象代码演示:

    class Student(object):

    # 类体

    pass

    student = Student()

    print(student)

    结果:

    解释:Student()表达式创建了一个学生对象,并把创建的对象赋值给student变量,student是指向学生对象的一个引用。通过student变量可以使用刚刚创建的学生对象。print函数打印对象输出。事实上,print函数调用了对象的_str_()方法输出字符串信息,

    str

    ()方法是object类的一个方法。

    实例变量

    类成员展示:

    类成员

    成员变量

    attribute

    属性

    property

    成员方法

    实例变量

    类变量

    实例方法

    静态方法

    类方法

    “实例变量”就是某个实例(或对象)个体特有的“数据”,例如学生的姓名、学号、性别等。

    代码演示:

    class Student(object):

    """定义学生类"""

    def __init__(self, name, sex, student_id):

    self.name = name

    # 定义姓名实例变量

    self.sex = sex

    # 定义性别实例变量

    self.student_id = student_id

    # 定义学号实例变量

    student = Student('张三', 1, 1711010201)

    print('姓名:{0}'.format(student.name))

    print('性别:{0}'.format('女'if student.sex == 0 else '男'))

    print('学号:{0}'.format(student.student_id))

    结果:

    注意:代码def语句是构造方法,构造方法是用来创建和初始化实例变量的。构造方法中的self指向当前实例的引用。代码self.name是在创建和初始化实例变量name,其中self.name表示对象的name实例变量。student.name是访问name实例变量。

    类变量

    “类变量”是所有实例(或对象)共有的变量。例如,学生的学费,假设每人的学费相同,那就可以在学生的类中设置一个类变量。

    代码演示(上例代码重构):

    class Student(object):

    """定义学生类"""

    tuition = 4800

    # 类变量学费

    def __init__(self, name, sex, student_id):

    self.name = name

    # 定义姓名实例变量

    self.sex = sex

    # 定义性别实例变量

    self.student_id = student_id

    # 定义学号实例变量

    student = Student('张三', 1, 1711010201)

    print('姓名:{0}'.format(student.name))

    print('性别:{0}'.format('女'if student.sex == 0 else '男'))

    print('学号:{0}'.format(student.student_id))

    print('学费:{0}'.format(Student.tuition))

    结果:

    注意:类变量在方法之外定义,访问通过“类名.类变量”的形式访问。切勿通过“实例名.类变量”的形式访问,不符合设计规范。也不要在类之外创建实例变量,他们无法通过类中的方法访问。

    构造方法

    在前几例代码中有_init_()方法,该方法用来创建和初始化实例变量,这种方法就是“构造方法”。

    init

    ()方法也属于魔法方法。

    在此不做代码演示。

    注意:定义时他的第一个参数是self,其后的参数才是用来初始化实例变量的,这些参数可以有默认值。调用构造方法是不需要传入self。

    实例方法

    实例方法与实例变量一样都是某个实例(或对象)个体特有的。

    方法是定义在类中的函数,而定义实例方法时他的第一个参数也应该是self,这个过程是将当前实例与该方法绑定起来,使该方法称为实例方法。

    代码演示:

    class Student(object):

    """定义学生类"""

    tuition = 4800

    # 类变量学费

    def __init__(self, name, sex, student_id, weight):

    self.name = name

    # 定义姓名实例变量

    self.sex = sex

    # 定义性别实例变量

    self.student_id = student_id

    # 定义学号实例变量

    self.weight = weight

    # 定义体重实例变量

    def eat(self):

    self.weight += 0.8

    print('eat...')

    student = Student('张三', 1, 1711010201, 60)

    print('姓名:{0}'.format(student.name))

    print('性别:{0}'.format('女'if student.sex == 0 else '男'))

    print('学号:{0}'.format(student.student_id))

    print('学费:{0}'.format(Student.tuition))

    print('体重:{0}'.format(student.weight))

    student.eat()

    print('{0}体重:{1}'.format(student.name, student.weight))

    结果:

    注意:student.eat()语句就是调用实例方法

    类方法

    “类方法”与“类变量”类似属于类,不属于个体实例的方法,类方法不需要与实例绑定,但需要与类绑定,定义时他的第一个参数是类的type实例。type是描述Python数据类型的类,Python中所有数据类型都是type的一个实例。

    代码演示:

    class Student(object):

    """定义学生类"""

    tuition = 4800

    # 类变量学费

    def __init__(self, name, sex, student_id, weight):

    self.name = name

    # 定义姓名实例变量

    self.sex = sex

    # 定义性别实例变量

    self.student_id = student_id

    # 定义学号实例变量

    self.weight = weight

    # 定义体重实例变量

    def eat(self):

    self.weight += 0.8

    print('eat...')

    # 学费与重修费之和

    @classmethod

    def tuition_add(cls, repair_fee):

    return cls.tuition + repair_fee

    student = Student('张三', 1, 1711010201, 60)

    print('姓名:{0}'.format(student.name))

    print('性别:{0}'.format('女'if student.sex == 0 else '男'))

    print('学号:{0}'.format(student.student_id))

    print('学费:{0}'.format(Student.tuition))

    print('体重:{0}'.format(student.weight))

    student.eat()

    print('{0}体重:{1}'.format(student.name, student.weight))

    print('学费与重修费总和:{0}'.format(Student.tuition_add(400)))

    结果:

    注意:定义类方法的两个关键:

    一、方法第一个参数是cls是type类型,是当前Student类型的实例;

    二、方法使用装饰器@classmethod声明该方法是类方法。

    类方法使用:

    类方法可以访问类变量和其他类方法,但不可访问其他实例方法和实例变量;

    类方法调用采用“类名.类方法”形式调用。可以通过实例调用,但不符合规矩。

    静态方法

    如果定义的方法既不想与实例绑定,又不想与类绑定,只是想把类作为他的命名空间,那么可以定义静态方法。

    代码演示(上述代码重构):

    class Student(object):

    """定义学生类"""

    tuition = 4800

    # 类变量学费

    def __init__(self, name, sex, student_id, weight):

    self.name = name

    # 定义姓名实例变量

    self.sex = sex

    # 定义性别实例变量

    self.student_id = student_id

    # 定义学号实例变量

    self.weight = weight

    # 定义体重实例变量

    def eat(self):

    self.weight += 0.8

    print('eat...')

    # 学费与重修费之和

    # 类方法

    @classmethod

    def tuition_add(cls, repair_fee):

    return cls.tuition + repair_fee

    # 静态方法

    @staticmethod

    def tuition_with(repair_fee):

    return Student.tuition_add(repair_fee)

    student = Student('张三', 1, 1711010201, 60)

    print('姓名:{0}'.format(student.name))

    print('性别:{0}'.format('女'if student.sex == 0 else '男'))

    print('学号:{0}'.format(student.student_id))

    print('学费:{0}'.format(Student.tuition))

    print('体重:{0}'.format(student.weight))

    student.eat()

    print('{0}体重:{1}'.format(student.name, student.weight))

    print('学费与重修费总和:{0}'.format(Student.tuition_add(400)))

    print('学费与重修费总和:{0}'.format(Student.tuition_with(400)))

    结果:

    注意:@staticmethod装饰器,声明方法是静态方法,方法参数不指定self和cls。

    调用静态方法与调用类方法相似都通过类名实现,也可以通过实例调用,但不符合规范。

    类方法与静态方法在很多场景是类似的,只是在定义时有一些区别。类方法需要绑定类,静态方法不需要绑定类,静态方法与类的耦合度更加松散。

    在类中定义静态方法只是为了提供一个基于类名的命名空间。

    欢迎参考学习,有错请指证,喜欢的请关注本人博客,不定期更新学习心得,学习笔记。

    展开全文
  • 关于数据库的学习

    2010-07-16 10:20:00
    我见过很多学生学习完数据库建的表,要求的报表是什么样,表就建成什么样,最典型的是成绩单,字段如下:学号,数学,英语,政治,物理,电工...,如果不同年级科目不一样,是不是都要建不同的表,不知道是老师教的...
  • 各个结点怎么构成链表的?没有头指针head行不行?p起什么作用,没有它行不行?源代码演示:#include<stdio.h>//头文件 struct student //定义学生结构体 { int num; //学号 float...
  • 各个结点怎么构成链表的? 没有头指针head行不行? p起什么作用,没有它行不行? 源代码演示: #include<stdio.h>//头文件 struct student //定义学生结构体 { int num; //学号 float score;//成绩 ...
  • 数据库课堂笔记4-完整性约束

    万次阅读 2018-12-10 11:08:33
    完整性约束加在数据库模式上的一个具体条件,它规定什么样的数据能够存储到数据库系统中。 例如: 学生的年龄必须整数,取值范围为14--29; 学生的性别只能“男”或“女”; 学生学号一定唯一的; 学生...
  • 1.建立队伍表(队伍编号,队长,队员1,队员2,…,指导教师1,…)并填入学号但却发现多个字段中只能有一个与学生表(学号…)建立关系。所以队员信息无法形成关系,虽然依然记录但作为队员的学生就无法查询到参与...
  • 面向对象的编程思想:按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建的软件系统就存在什么样的实体。 例如:在真实世界的学校里,会有学生和老师等实体,学生学号、姓名、所在班级等...
  • 面向对象的编程思想:按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建的软件系统就存在什么样的实体。 例如:在真实世界的学校里,会有学生和老师等实体,学生学号、姓名、所在班级等...
  • 面向对象的编程思想:按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建的软件系统就存在什么样的实体。 例如:在真实世界的学校里,会有学生和老师等实体,学生学号、姓名、所...
  • 第十一讲 第四章 数据结构 4.1 基本概念 上下级 4.1.0 数据结构的研究内容 数据(对象)的性质 信息学院 什么样的数据/集合 1010 信息学院 数据联系 时间 微电子学系 性别 变量 相互之间是什么关系 信息 姓名 学号 ...
  • 高考再见,大学你好

    2020-07-10 17:02:32
    面对未来,相信很多的同学已经开始畅想,大学是什么样的?是有丰富有趣的社团活动、博学多才的老师、友善可爱的同学还是信息化的智慧校园?那么今天,就让小编带各位同学提前感受一下大学生活。 新生报到 收到...
  • 一、大数据长什么样 长像很普通,至少看两眼后就觉得很平常。 举个栗子: 一个表格,学生信息表,里面有学号、姓名、性别、年龄、学校、学院、专业、年级、宿舍号等信息如下, 但是表在库里,我们想看,跟现实中的...
  • 4.1 面向对象编程

    2016-11-19 22:40:50
    属性描述了这个类是什么样的,方法体现了这个类能表现出哪些行为。 一个学生类,可能会有个学号的属性,也会进行学习的方法。 这里,每一个类的实例,那就是一个数据啊,这个类实例拥有的方法就是算法。面向对象...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    二者有何相同和不同之处,抽象数据类型的主要特点是什么? 使用抽象数据类型的主要好处是什么?【北京邮电大学 1994 一(8分)】 4. 回答问题(每题 2分)【山东工业大学 1997 一 (8分)】 (1)在数据结构课程中...
  • 假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。 (4)、把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。 假如不知道...
  • sql:寻找错误

    2010-03-24 13:52:10
    环境: mysql 5.1.45 ...正确的做法怎么样的啊?   还有,对不起了,我现在还没有javaeye的论坛积分   问题补充:  我现在这里想用嵌套查询,如果能有更加简单的方法,希望各位高手能贡献下。</p>

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

学生学号是什么样的