有时候我们会听到Python里所谓的鸭子类型和猴子补丁的说法,乍一听还以为是来到了动物园,Python这只大蟒蛇还可以和鸭子和猴子一起玩耍?...非也非也,鸭子类型和猴子补丁实际上是两个生动有趣的比喻,用来说明Python的动态特性。 鸭子类型?(duck type) 是对Python中数据类型本质上是由属性和行为来定义的一种解读。 猴子补丁?...一,鸭子类型 鸭子类型是对Python中数据类型本质上是由属性和行为来定义的一种解读。 Python是一种动态语言,不像Java和C++这种强类型语言,Python里实际上没有严格的类型检查。...") # duckshow这个函数设计的本意是需要传入一个Duck对象作为参数的。...,其数据类型属于鸭子类型,没有严格类型检查, # Goose这个类具有和Duck这个类相同的方法, # ee这只鹅划起水来像只鸭子,叫起来也像一只鸭子, # 所以duckshow这个函数也可以对ee进行作用
当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口。但是,如果直接判断是否是 Window 类型,那么在设计器中这个属性的设置就会直接出现异常。...那么有没有什么方法能够得知这是一个设计时的窗口呢?这样就不会抛出异常,而能够完美支持设计器了。 ---- 方法一:判断设计时属性 WPF 原生自带一个附加属性可以判断一个依赖对象是否来源于设计器。...如何编写 WPF 的标记扩展 MarkupExtension,即便在 ControlTemplate/DataTemplate 中也能生效 方法二:判断设计时窗口 上面的方法是个通用的判断设计器中的方法...return true; } } return false; } } 于是,只需要调用一下这个方法即可得到此窗口实例是否是设计时的窗口...} else if (d is Window) { // 检测到真的是窗口,做一些真实窗口初始化需要做的事情。 } else { // 这不是一个窗口,需要抛出异常。
刚刚在看>一书的”ENUM类型”一节, 以下面的代码举例, 得出结论: “还可以看出对于不在ENUM指定范围内的值时, 并没有返回警告, 而是插入了enum(‘M’, ‘F’)的第一个值...,5.7 及以上的默认是严格处理,所以会出错。...这个相当于是一个警告信息,在我本地测试的 5.7 中,直接插入会报错,但是使用 ignore 后,数据能被强制插入,但是是空值。...INSERT ignore INTO user (sex) VALUES (5); 在服务器使用 MySQL 5.5 测试 无论是否添加 ignore 数据都能被插入,但是是空值。...在 MySQL 枚举类型的“八宗罪” 这篇文章的第七条,文中提到了,如果不合法会被处理成空字符串,在后一段中又提到了因为类型的缘故,会根据枚举索引去取值。
前言 最近有朋友问我这么一个面试题目: 现在有一个非常庞大的数据,假设全是 int 类型。现在我给你一个数,你需要告诉我它是否存在其中(尽量高效)。...而我们是否可以换种思路,因为只是需要判断数据是否存在,也不是需要把数据查询出来,所以完全没有必要将真正的数据存放进去。 伟大的科学家们已经帮我们想到了这样的需求。...它主要就是用于解决判断一个元素是否在一个集合中,但它的优势是只需要占用很小的内存空间以及有着高效的查询效率。 所以在这个场景下在合适不过了。...构造方法中有两个比较重要的参数,一个是预计存放多少数据,一个是可以接受的误报率。 我这里的测试 demo 分别是 1000W 以及 0.01。 ?...重点是 bits.set() 方法。 ? 其实 set 方法是 BitArray 中的一个函数,BitArray 就是真正存放数据的底层数据结构。 利用了一个 long[] data 来存放数据。
为了安全,现在不再开放非 80 之外的公网端口。由于机器少了,80 端口不够,这些可视化 UI 不再能直接访问到了。所以需另寻其他出路。...一个完整的演示实例 为了实现上面的需求,在 Nginx 中你完全可以使用 Rewrite 模块下 if 指令来完成。...由于 Nginx 默认带的模块比较少,如果需使用第三方模块,你可能还需要重新编译 Nginx。所以这里直接使用 OpenResty,它扩展了 Nginx,并且集成了很多成熟的 LUA 模块。...OpenResty 默认是安装到 /usr/local/ 目录下,当你看到有一个 openresty 目录就表示你安装成功。...# root html; # index index.html index.htm; # } #} } 至此,我们就演示完了一个反向代理实现多个不同类型的后端网站访问的场景
有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问...换句话说,isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。...当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态。...所以,在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。...(25) # 调用实例方法 >>> s.age # 测试结果 25 但是,给一个实例绑定的方法,对另一个实例是不起作用的: >>> s2 = Student() # 创建新的实例 >>> s2.set_age
换句话说,isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。...>>> s.set_age(25) # 调用实例方法 >>> s.age # 测试结果 25 但是,给一个实例绑定的方法,对另一个实例是不起作用的: >>> s2 = Student() # 创建新的实例...其实,更多的时候,我们需要判断一个对象是否能被调用,能被调用的对象就是一个Callable对象,比如函数和我们上面定义的带有__call__()的类实例: >>> callable(Student())...NOV = 11 DEC = 12 好处是简单,缺点是类型是int,并且仍然是变量。 更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。...,Hello是一个class,它的类型就是type,而h是一个实例,它的类型就是class Hello。
答案:单例类只能有一个实例,必须自己创建自己的唯一实例,必须给所有其他对象提供这一实例。 单例使用场景的最佳实践是由于某些驱动程序限制或由于许可问题的限制只能连接数据库。 Q6:什么是循环?...While循环中在执行语句之前先检查是否满足条件。...答案:如果使用了继承层次结构,那么这个类就可能既是一个类的父类也是另一个类的子类,如下例中的大陆类既是世界类的子类,同时也是国家类的父类。...答案:使用继承的主要优点是代码的可重用性,因为继承使子类能够重用其父类的代码。多态性(可扩展性)是另一个好处,允许引入新的功能而不影响现有的派生类。 Q49:类的变量和方法的默认访问说明符是什么?...答案:如果没有异常处理,那么程序将中止,且不会执行异常抛出之后的语句。 Q89:如果定义了一个类定义了多个构造函数,那么是否可以在一个构造函数中调用另一个构造函数?
是不是期望它按照指向的对象的类型去调啊。 指向的是父类对象,就按父类的析构去走;指向的是子类的对象,就按子类的析构去走。 那我们可以怎么做? ,是不是多态就上场了。...但是子类只对func进行了重写。 然后main函数里面用了一个子类对象的指针去调用test函数,能调到吗?...那现在大家思考一个问题,test函数里面调用func,是否构成多态? 那我们就看它是否满足多态的两个条件嘛,首先虚函数的重写,这里是满足的,子类对父类的虚函数func进行了重写。...5.2 override 然后再看一个关键字叫做override 他有什么作用呢? override:检查派生类是否对基类的虚函数进行了重写,如果没有重写编译报错。...如果重写不正确也能检查出来 6. 重载、覆盖(重写)、隐藏(重定义)的对比 7.
而且下面要说的区别,比执行速度还重要。 type的返回值是一个对象的类型(类),可以用它来检查variable的类型是否为str。...isinstance要检查第一个参数对象是不是第二个参数所指定的类的实例,例如variable是str类的一个实例吗?...或者,检查是不是第二个参数所指定的类的子类的示例,例如variable是str子类的一个实例吗? 这在实践很有用。假设自定义一个类,它类似于列表,但方法可以更多一些。...isinstance检查my_list是否是list的一个实例(它不是)、或者是否是list的一个子类的实例(它是,因为MyAwesomeList是list的一个子类)。...另一方面,如果想显式地检查给定对象是否属于某一特定类型(而不是它的子类),可以使用type,但通常用这样的语句type(var) is some_type,而不是type(var) == some_type
双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。...我们回顾上次的例子,如果继承关系是: object -> Animal -> Dog -> Husky 那么,isinstance()就可以告诉我们,一个对象是否是某种类型。...其实,更多的时候,我们需要判断一个对象是否能被调用,能被调用的对象就是一个Callable对象,比如函数和我们上面定义的带有__call__()的类实例: >>>callable(Student())...NOV = 11 DEC = 12 好处是简单,缺点是类型是int,并且仍然是变量。 更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。...,Hello是一个class,它的类型就是type,而h是一个实例,它的类型就是class Hello。
蛇拥有爬行动物的特征,同时,又拥有标志自己是一条蛇的特征。 类型实例关系(图中以虚线描述):这种关系存在于两个对象之中,其中一个对象(实例)是另一个对象(类型)的具体实现。...你也许会认为,对象有名字,但名字并不是对象的组成部分。对象的名字存在于这个对象的命名空间(namespace)之外或者是另一个对象的属性。...它们能被继承。这意味着你可以利用存在的类型对象创造出新的类型对象。已经存在的类型对象是新的类型对象的超类。 它们能被实例化。这意味着你可以利用已经存在的类型对象创造出新的实例对象。...你说说,继承2有什么意义? 是否还是会疑惑到底社么是类型?什么是非类型? 这里有一条判断规则送给你: 如果一个对象,它的类型是“”,那么,它是类型,否则不是。 ...还记得怎么判断一个对象的类型吗?没错的,__class__和type()随意你用。
其实不是说抽象类有什么用,一般类确实也能满足应用,但是现实中确实有些父类中的方法确实没有必要写,因为各个子类中的这个方法肯定会有不同,所以没有必要再父类里写。...小王:“你要让我帮你拿那个水杯吗?” 你要的是水杯类的对象。而东西是水杯的父类。通常东西类没有实例对象,但我们有时需要东西的引用指向它的子类实例。...我抽象出两个必须的类,一个是那个房间,或者就它地图也行。另一个是方块。我发现方块有很多种,数一下,共6种。它们都是四个小矩形构成的。但是它们还有很多不同,例如:它们的翻转方法不同。...当然一个属性只能有一种类型。 我们写一个方块类,用它来派生出6个子类。而房子类的当前方块属性的类型是方块类型。它可以指向任何子类。但是,当我调用当前方块的翻转方法时,它的子类都有吗?...但是,如果你没有这样做,我会认为可能会在某个地方,你会实例化一个方块类的实例,但我找了所有的地方都没有找到。最后我会大骂你一句,你是来欺骗我的吗,你这个白痴。 把那些和“东西”差不多的类写成抽象的。
这两个操作符使用了一种简单传神的方式来检查一个值的类型或将某个值转换为另一种类型。 如同协议实现的检查(此处应有链接)中描述的那样,你还可以使用类型转换来检查类型是否遵循某个协议。...为类型转换定义类层次 你可以在类及其子类层次中使用类型转换来判断特定类实例的类型并且在同一类层次中将该实例类型转换为另一个类。...类型检查 使用类型检查操作符 ( is )来检查一个实例是否属于一个特定的子类。如果实例是该子类类型,类型检查操作符返回 true ,否则返回 false 。...这允许你检查向下类型转换是否成功。 当你确信向下转换类型会成功时,使用强制形式的类型转换操作符( as! )。当你向下转换至一个错误的类型时,强制形式的类型转换操作符会触发一个运行错误。...当数组中的 Song 实例使用向下转换至 Movie 类型时会失败。为了处理这种情况,上面的例子使用了可选绑定来检查可选 Movie 类型是否包含了一个值(或者说检查向下类型转换是否成功)。
2.使用类型注解和静态类型检查 Python 是一种动态类型的编程语言,这意味着你不必声明变量或函数参数的类型。这对于灵活性来说是非常好的,因为你可以为任何类型的对象重用一个函数。...Mypy查看所有源代码文件,检查类型规则是否满足要求。例如,传递给函数的所有参数类型是否与函数签名兼容?对象上调用的方法是否真正定义? Mypy不会运行你的代码,所以它不会捕获所有的运行时bug。...如果我将BaseClass子类的实例传递到另一个函数中,我怎么知道它们的行为是否良好?假设其他函数调用foo,它应该如何处理不同数量的参数?...但是如果使用静态类型检查,最好的做法是定义接口。接口定义了最小的属性和方法,这些属性和方法必须在类上实现才能被认为是一个子类型。...然而或许可以从面向继承的范例中移除大多数子类,并将它们浓缩为单个类;然后通过将每个实例引用到其他对象来实现自定义行为。这就自然而然地引出了单一责任原则[15]。 继承是罪过吗?
他正在接受技术主管职位的面试,并且有超过6年的经验。如果你还没有遇到过这种情况,那么字符数组和字符串可以用来存储文本数据,但是选择一个而不是另一个很难。...由于任何有权访问内存转储的人都可以以明文形式找到密码,这是另一个原因,你应该始终使用加密密码而不是纯文本。...,只是要注意,如果你使用的实例方法且该方法能改变对象的状态的话, 则需要确保该方法的线程安全。...Javac 中 wait 和 notify 方法之间的任何潜在竞争条件。 10.你能用Java覆盖静态方法吗?如果我在子类中创建相同的方法是编译时错误?...这意味着如果你使用父类的类型来调用静态方法,那么原始静态将从父类中调用,另一方面如果你使用子类的类型来调用静态方法,则会调用来自子类的方法。简而言之,你无法在Java中覆盖静态方法。
能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。...因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。...一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。...126)你能写出一个正则表达式来判断一个字符串是否是一个数字吗?...受检查异常编译器在编译期间检查。对于这种异常,方法强制处理或者通过 throws 子句声明。其中一种情况是 Exception 的子类但不是 RuntimeException 的子类。
蛇拥有爬行动物的特征,同时,又拥有标志自己是一条蛇的特征。 类型实例关系(图中以虚线描述):这种关系存在于两个对象之中,其中一个对象(实例)是另一个对象(类型)的具体实现。...你也许会认为,对象有名字,但名字并不是对象的组成部分。对象的名字存在于这个对象的命名空间(namespace)之外或者是另一个对象的属性。...它们能被继承。这意味着你可以利用存在的类型对象创造出新的类型对象。已经存在的类型对象是新的类型对象的超类。 它们能被实例化。这意味着你可以利用已经存在的类型对象创造出新的实例对象。...你说说,继承2有什么意义? 是否还是会疑惑到底社么是类型?什么是非类型? 这里有一条判断规则送给你: 如果一个对象,它的类型是“”,那么,它是类型,否则不是。...还记得怎么判断一个对象的类型吗?没错的,__class__和type()随意你用。
,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。...True 使用isinstance() isinstance()可以告诉我们,一个对象是否是某种类型。...他判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。...在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面的代码是等价的: >>> len('ABC') 3...>>> s.age # 测试结果 25 但是,给一个实例绑定的方法,对另一个实例是不起作用的: >>> s2 = Student() # 创建新的实例 >>> s2.set_age(25) # 尝试调用方法
: 1.不能存在同一个类中,在继承或实现关系的类中; 2.名相同,参数列表相同,方法返回值相同, 3.子类方法的访问修饰符要大于父类的。 4.子类的检查异常类型要小于父类的检查异常。...但是,你必须遵守Java中将方法声明为static的准则, 可以创建抽象类的实例吗? 不可以,你不能创建Java抽象类的实例,它们是不完全的。即使你的抽象类不包含任何抽象方法,你也不能对它实例化。...将类声明为abstract的,就等你你告诉编译器,它是不完全的不应该被实例化。当一段代码尝试实例化一个抽象类时Java编译器会抛错误。 抽象类必须有抽象方法吗? 不需要,抽象类有抽象方法不是强制性的。...这样做的目的,是确保能和Java 5之前的版本开发二进制类库进行兼容。你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。...(3)什么是泛型中的限定通配符和非限定通配符 ? 这是另一个非常流行的Java泛型面试题。限定通配符对类型进行了限制。
领取专属 10元无门槛券
手把手带您无忧上云