python继承

python基础--面向对象之多态

久未见 提交于 2019-11-27 13:54:21
# 多态是指一类事物有多种行态, # 例如:动物有多种形态:人,狗,猫 # 他们有一些共同的特征:吃,喝,拉,撒 # 多态性是指在不考虑实例类型的情况下使用实例 # 对同一事物不同的类,对象有不同的响应, # 例如:放假了,有的同学回家,有的去旅游,有的去兼职 # 有的在敲代码(就是我啦) # 列表,字符串,字典都有len属性,但是是不同的执行过程。 class Animal(): def talk(self): pass class People(Animal): def __init__(self,name): self.name = name def talk(self): print("%s 说人话"%self.name) class Cat(Animal): def __init__(self,name): self.name = name def talk(self): print("%s 说猫话"%self.name) class Dog(Animal): def __init__(self,name): self.name = name def talk(self): print("%s 说狗话"%self.name) peo = People('wang') cat = Cat('cat') dog = Dog('dog') peo.talk() cat.talk

python基础--面向对象之继承

烂漫一生 提交于 2019-11-27 13:51:14
# 继承是一种创建新类的方式,新建的类可以继承一个,或者多个父类, # 父类又可以称为基类或者超类,新建的类可以称为派生类,子类 class ParentClass1: # 定义父类 1 pass class ParentClass2: # 定义父类 2 pass class SubClass1(ParentClass1): # 继承一个父类 pass class SubClass2(ParentClass1,ParentClass2): # 继承两个父类 pass print(SubClass1.__bases__) # 查看父类 print(SubClass2.__bases__) class Animal: def eat(self): print("%s is eating" %self.name) def drink(self): print("%s is drinking" % self.name) def shit(self): print("%s is shiting" %self.name) def pee(self): print("%s is peeing" %self.name) # 子类可以使用父类的函数属性和数据属性 class Cat(Animal): def __init__(self,name): self.name = name self

Python全栈之路系列之面向对象运算符重载

故事扮演 提交于 2019-11-27 12:59:22
运算符重载的概念如下: 运算符重载让类拦截常规的Python运算; 类可重载所有Python表达式运算符; 类也可重载打印、函数调用、属性点号运算等内置运算; 重载是类实例的行为想内置类型; 重载是通过提供特殊名称的类方法来实现的; 常见的运算符重载方法 方法 重载 调用 __init__ 构造函数 对象建立:X = Class(args) __del__ 解析函数 X对象收回 __add__ 运算符+ 如果没有 __iadd__ ,X+Y,X+=Y __or__ 运算符或 如果没有 __ior__ __repr__ , __str__ 打印、转换 print(X)、repr(X)、str(X) __call__ 函数调用 X(*args, **kwargs) __getattr__ 点号运算 X.undefined __setattr__ 属性赋值语句 X.any = value __delattr__ 属性删除 del X.any __getattribute__ 属性获取 X.any __getitem__ 索引运算 X[key],X[i:j],没 __iter__ 时的for循环和其他迭代器 __setitem__ 索引赋值语句 X[key]=value,X[i:k]=sequence __delitem__ 索引和分片删除 del X[key], del X[i:j] _

python 中__slots__类属性

谁都会走 提交于 2019-11-27 12:45:13
私有属性: Python 不能像 Java 那样使用 private 修饰符创建私有属性,但是 Python 有个简单的机制,能避免子类意外覆盖“私有”属性。 举个例子。有人编写了一个名为 Dog 的类,这个类的内部用到了 mood 实例属性,但是没有将其开放。现在,你创建了 Dog 类的子类:Beagle。如果你在毫不知情的情况下又创建了名为 mood 的实例属性,那么在继承的方法中就会把 Dog 类的 mood 属性覆盖掉。这是个难以调试的问题。 为了避免这种情况,如果以 __mood 的形式(两个前导下划线,尾部没有或最多有一个下划线)命名实例属性,Python 会把属性名存入实例的 __dict__ 属性中,而且会在前面加上一个下划线和类名。因此,对 Dog 类来说, __mood 会变 _Dog__mood ;对 Beagle 类来说,会变成 _Beagle__mood 。这个语言特性叫名称改写(name mangling)。 Python 解释器不会对使用单个下划线的属性名做特殊处理,不过这是很多 Python 程序员严格遵守的约定,他们不会在类外部访问这种属性。 遵守使用一个下划线标记对象的私有属性很容易,就像遵守使用全大写字母编写常量那样容易。 例子: __slots__类属性 __slots__ 它会影响对象的内部存储,对内存用量可能也有重大影响

Python面向对象编程

独自空忆成欢 提交于 2019-11-27 11:05:34
# Python中的类的概念和其他语言相比没什么不同 # 比较特殊的是protected和private在Python中是没有明确限制的 # 一个惯例是用单下划线开头的表示protected,用双下划线开头的表示private # Python中定义一个类 class class1: """Class A""" # 类定义中紧跟着类名字下一行的字符串叫做docstring, # 可以写一些用于描述类的介绍,如果有定义则通过“类名.__doc__”访问 print('class1') # 构造函数,用关键字“__init__” # 在实例化对象时,构造函数被自动调用,一般用于初始化变量 # self:在类中的方法,第一个参数必须是self def __init__(self,name,job): print('I am __init__ in class1') print('My name is '+ name+' My job is '+job) # 定义属性,一定要用self.属性名 self.myname=name self.myjob=job # 定义类中的方法: def myfunc(self,funcName): print('I an in class1.myfunc') print(funcName) # 在实例化类时传入参数给构造函数 a=class1(

35个高级python知识点

独自空忆成欢 提交于 2019-11-27 11:05:25
No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是 Python 中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function)也是对象,而且Python的代码和模块也都是对象。 Python中函数和类可以赋值给一个变量 Python中函数和类可以存放到集合对象中 Python中函数和类可以作为一个函数的参数传递给函数 Python中函数和类可以作为返回值 Step.1 # 首先创建一个函数和一个Python3.x的新式类 class Demo(object): def __init__(self): print("Demo Class") # 定义一个函数 def function(): print("function") # 在Python无论是函数,还是类,都是对象,他们可以赋值给一个变量 class_value = Demo func_value = function # 并且可以通过变量调用 class_value() # Demo Class func_value() # function Step.2 # 将函数和类添加到集合中 obj_list = [] obj_list.append(Demo) obj_list.append(function) # 遍历列表 for i in obj_list: print

Python 异常处理

我们两清 提交于 2019-11-27 10:28:35
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 异常处理: 本站Python教程会具体介绍。 断言(Assertions):本站Python教程会具体介绍。 python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知退出 StandardError 所有的内建标准异常的基类 ArithmeticError 所有数值计算错误的基类 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError 除(或取模)零 (所有数据类型) AssertionError 断言语句失败 AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 IOError 输入/输出操作失败 OSError 操作系统错误 WindowsError 系统调用失败 ImportError 导入模块

python异常处理

旧巷老猫 提交于 2019-11-27 10:28:24
1. 异常 (1) 异常处理 #没有异常处理 num = int('abc') print(num) #报错 #异常处理 try: num = int('abc') #try里的代码是受保护的 print(num) except Exception as e: print(e) #输出invalid literal for int() with base 10: 'abc',程序正常运行 e是由Exception类实例化的一个对象 class Exception(BaseException): """ Common base class for all non-exit exceptions. """ def __init__(self, *args, **kwargs): # real signature unknown pass @staticmethod # known case of __new__ def __new__(*args, **kwargs): # real signature unknown """ Create and return a new object. See help(type) for accurate signature. """ pass (2) 异常分类 Exception是万能的异常捕捉方法,可以捕捉到任何错误。 li = [] inp

python异常处理

眉间皱痕 提交于 2019-11-27 10:25:13
#!/usr/bin/python import traceback try: 1/0 #except Exception,e: # print traceback.format_exc() except Exception as e: print e #!/usr/bin/python import traceback try: 1/0 #except Exception,e: # print traceback.format_exc() except Exception , e: print e Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。 方式一:try语句: 1使用try和except语句来捕获异常 try: block except [exception,[data…]]: block try: block except [exception,

Python中下划线

旧时模样 提交于 2019-11-27 09:27:46
Python中下划线---完全解读 Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始。 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。 “单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量; “双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。 以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。 现在我们来总结下所有的系统定义属性和方法, 先来看下保留属性: >>> Class1.__doc__ # 类型帮助信息