python继承

python issubclass 和 isinstance函数

匿名 (未验证) 提交于 2019-12-02 22:56:40
Python issubclass() 函数 issubclass () 方法用于判断参数 class 是否是类型参数 classinfo 的子类。 语法: issubclass ( class , classinfo ) 参数 class -- 类。 classinfo -- 类。 返回值 如果 class 是 classinfo 的子类返回 True ,否则返回 False 。 例子: #!/usr/bin/python # -*- coding: UTF-8 -*- class A : pass class B ( A ): pass print ( issubclass ( B , A )) # 返回 True Python isinstance() 函数 isinstance () 函数来判断一个对象是否是一个已知的类型,类似 type ()。 isinstance () 与 type () 区别: type () 不会认为子类是一种父类类型,不考虑继承关系。 isinstance () 会认为子类是一种父类类型,考虑继承关系。 如果要判断两个类型是否相同推荐使用 isinstance ()。 语法: isinstance ( object , classinfo ) 参数 object -- 实例对象。 classinfo -- 可以是直接或间接类名

4、Python中的控制结构

匿名 (未验证) 提交于 2019-12-02 22:56:40
Ŀ¼ Ŀ¼ 跟其他的编程语言是一样的情况 #!/usr/bin/env python # encoding: utf-8 my_name = 'zengraoli' if len(my_name > 0 ): print( "len is > 0" ) elif len(my_name == 0 ): print( "len is == 0" ) else : print( "len is < 0" ) #!/usr/bin/env python # encoding: utf-8 i = 0 my_name = 'zengraoli' while i < len(my_name): print(my_name[i]) i += 1 #!/usr/bin/env python # encoding: utf-8 i = 0 my_name = 'zengraoli' for i in range(len(my_name)): #range的作用是得到一个最大范围,步长为1 print(my_name[i]) *range()目前只能是产生一个范围内的整数数组,不支持float 如果需要用到float步长,则需要使用到numpy模块的arange() #!/usr/bin/env python # encoding: utf- 8 import numpy as np for i

以例子说明python的类、继承和多态

匿名 (未验证) 提交于 2019-12-02 22:54:36
## 1-10 1 class Player : ## written by LiSongbo def __init__ ( self , name ) : self ._name = name self ._score = 0 def reset_score ( self ) : self ._score = 0 def incr_score ( self ) : self ._score = self ._score + 1 def get_name ( self ) : return self ._name def __str__ ( self ) : return "name = %s,score=%s" % ( self ._name, self ._score) def __repr__ ( self ) : return 'Player(%s)' % str ( self ) class Human (Player) : ## Player ,## written by LiSongbo def __repr__ ( self ) : return 'Human(%s)' % str ( self ) def get_move ( self ) : while True : try : n = int ( input ( '%s move (1-10): ' %

Python 异常

匿名 (未验证) 提交于 2019-12-02 22:54:36
Python 异常 异常简介 raise语句 内置的异常类 自定义异常类 except捕获异常 finally函数处理 异常之禅 异常简介 Python在处理正常和异常,提供了功能强大的替代解决方案-- 异常处理方式 异常对象未被处理或者捕获时,程序报错终止并显示错误信息 如果只用于显示错误信息,显然毫无意义,所以要捕获该异常并处理 raise语句 引发异常可以采用raise语句去实现,并将一个类(必须是Exception的子类)或者实例化作为参数,如果直接将类作为参数,将自动创建一个实例。 例子:>>> raise Exception('This is common Error') Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> raise Exception('This is common Error') Exception: This is common Error 内置的异常类 Python异常内置类 类 名 描 述 Exception 几乎所有的异常类都是从它派生出来的 AttributeError 引用属性或给它赋值失败时引起 OSError 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类 IndexError 使用序列中不存在的索引时引发

python OO

匿名 (未验证) 提交于 2019-12-02 22:54:36
python中的OO 写给自己的备忘,很浅显,可能只是句法方面的事,不涉及OO思想之类的,因为OO思想是共通的,并没有python的OO思想一说 PS 示例代码来自《python简明教程》 继承 python中的继承语法跟java/c++系不同,却不是:也不是extends,是这样的 class child(parent): pass #py中,pass是空语句块 self,init,和del python中的self有点类似于c++/java中的this是指针,代表本实例,不同的地方在于self要写在类函数的参数列表中,传递了self才能在函数中使用类实例的数据,但在调用时不需要写这个参数 init类似于构造函数,用法也差不多,而del,不像c++中的析构,比较像java中的finalize,在实例被回收时调用,同java中一样,这个函数被调用的时间是不一样的 class SchoolMember: def __init__(self, name, age): self.name = name self.age = age print ‘(Initialized SchoolMember: %s)’ % self.name def __del__(self, name, age):pass def tell(self): print ‘Name:”%s” Age:”%s”‘ %

深入理解Python中的metaclass

匿名 (未验证) 提交于 2019-12-02 22:54:36
元类(metaclass)是用来创建类(对象)的可调用对象。这里的可调用对象可以是函数或者类等。但一般情况下,我们使用类作为元类。对于实例对象、类和元类,我们可以使用下面的图来描述。 我们可以使用 type 来创建类(对象),事实上, type 就是一个元类。 元类的主要目的是为了控制类的创建行为。 先看一个简单的例子,假设有下面的类: class Foo (object) : name = "foo" def bar (self) : print( "bar" ) 现在我们想给这个类的方法和属性名称前面加上 my_ 前缀,即就是把 name 变成 my_name 。另外,我们还要增加一个echo方法。这里我们通过元类实现。 首先,定义一个元类,按照默认习惯,类名以Metaclass结尾。 class PrefixMetaclass (type) : def __new__ (cls, name, bases, attrs) : # 给所有的属性和方法前面加上前缀 my_ _attrs = (( "my_" + name, value) for name, value in attrs.items()) # 转化为字典 _attrs = dict((name, value) for name, value in _attrs) # 增加一个echo方法 _attrs[ "echo"

python中的super()函数

匿名 (未验证) 提交于 2019-12-02 22:54:36
最能感受到super函数的作用在于进行钻石继承的时候。 钻石继承:由一个基类衍生两个及以上的超类,然后在衍生,在类树的最底层生成一个子类,这样的类树结构就是一个类似 钻石外形,所以,最底层类继承称为钻石继承 首先: 这是直接通过超类调用方法给子类使用 class baseClass : num_base_calls = 0 def call_me (self) : print( "Calling method on Base Class" ) self.num_base_calls += 1 class leftSubClass (baseClass) : num_left_calls = 0 def call_me (self) : baseClass.call_me(self) print( "Calling method on left SubClass" ) self.num_left_calls += 1 class rightSubClass (baseClass) : num_right_calls = 0 def call_me (self) : baseClass.call_me(self) print( "Calling method on right SubClass" ) self.num_right_calls += 1 class SubClass

Python3.7官方向导翻译之Python类

匿名 (未验证) 提交于 2019-12-02 22:54:36
类提供了将数据和功能捆绑在一起的手段。 创建一个新类创建一个新类型的对象,允许创建该类型的新实例。 每个类实例都可以附加属性以保持其状态。 类实例也可以有方法(由其类定义)来修改其状态。 与其他编程语言相比,Python的类机制为类添加了最少量的新语法和语义。 它是C ++和Modula-3中的类机制的混合体。 Python类提供了面向对象编程的所有标准功能:类继承机制允许多个基类,派生类可以重写其基类或类的任何方法,并且方法可以调用具有相同名称的基类的方法。 对象可以包含任意数量和种类的数据。 与模块一样,类也具有Python的动态特性:它们是在运行时创建的,并且可以在创建后进一步修改。 **在C++术语中,通常类成员(包括数据成员)是公有的(例外见下面的Privat Variables),并且所有的成员函数都是虚的(virtual)。和Modula-3中一样, 没有快捷的办法从对象的方法中来引用对象的成员:方法的第一个显示函数代表了对象本身,对对象本身的调用是隐式的。和Smaltalk中一样,类本身也是对象。 这为导入和重命名提供了语义。不像C++和Modula-3,内置类型可以作为基类来扩展。同样,和C++中的一样,大部分内置操作符有特殊的语法(算术操作符, 下标等),它们可以在类实例中重定义。** (由于缺乏普遍接受的术语来讨论类,我偶尔会使用Smalltalk和C +

Python学习之路10-测试代码

匿名 (未验证) 提交于 2019-12-02 22:54:36
《Python编程:从入门到实践》笔记。 本章主要学习如何使用Python标准库中的unittest模块对代码进行简单的测试。 作为初学者,并非必须为你尝试的所有项目编写测试;但参与工作量较大的项目时,你应对自己编写的函数和类的重要行为进行测试。这样你就能够更加确定自己所做的工作不会破坏项目的其他部分,你就能够随心所欲地改进即有代码。如果不小心破坏了原来的功能,你马上就会知道,从而能够轻松地修复问题。相比于等到Bug出现后再去改,在测试未通过时采取措施要容易得多。而且,如果你想要分享你的项目,有测试的代码更容易让人接受。 以下是一个将用户输入的姓与名拼接的函数: # name_function.py def get_formatted_name (first, last) : """返回一个整洁的完整姓名""" full_name = first + " " + last return full_name.title() if __name__ == '__main__' : print( "Enter 'q' at any time to quit." ) while True : first = input( "\nPlease give me a first name: " ) if first == "q" : break last = input( "Please

python学习-64 面向对象三大特性----继承1

◇◆丶佛笑我妖孽 提交于 2019-12-02 22:52:22
面向对象三大特性 1.三大特性? 继承,多态,封装 2.什么是继承? 类的继承和现实生活中的父与子,继承关系是一样的,父类为基类。 python中的类继承分为:单继承和多继承 3.举例说明 class Dad: money = 100 def __init__(self,name): self.name =name print(name) def hit(self): print('%s 正在打孩子' %self.name) class Son(Dad): pass s1 = Son('abc') print(Son.money) s1.hit() 运行结果: abc 100 abc 正在打孩子 Process finished with exit code 0 4.什么时候用继承? ----当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好。 ----当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好。 class Animals: def eat(self,name): print('%s 正在吃'%self.name) def drink(self,name): print('%s 正在喝'%self.name) class Cat(Animals): def __init__(self,name): self.name = name