python继承

Python面向对象编程——封装

别来无恙 提交于 2020-01-10 03:58:36
Python面向对象编程——封装 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,还有alex一起装进麻袋,然后把麻袋封上口子。照这种逻辑看,封装=‘隐藏’,这种理解是相当片面的。 一、先看如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) #其实这仅仅这是一种变形操作 #类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式: class A: __N=0 #类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N,会变形为_A__N def __init__(self): self.__X=10 #变形为self._A__X def __foo(self): #变形为_A__foo print('from A') def bar(self): self.__foo() #只有在类内部才可以通过__foo的形式访问到. #A._A__N是可以访问到的,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形 这种自动变形的特点: 1、类中定义的 __x 只能在内部使用,如 self.__x ,引用的就是变形的结果。 2、这种变形其实正是针对外部的变形,在外部是无法通过 __x 这个名字访问到的。 3、在子类定义的 __x 不会覆盖在父类定义的 __x ,因为子类中变形成了:

Python中__new__与__init__方法的区别详解

夙愿已清 提交于 2020-01-09 14:37:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点:   1. 新式类对象可以直接通过__class__属性获取自身类型:type   2. 继承搜索的顺序发生了改变,经典类多继承时属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧(即深度优先搜索);新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动 例子: 经典类: 搜索顺序是(D,B,A,C) >>> class A: attr = 1 ... >>> class B(A): pass ... >>> class C(A): attr = 2 ... >>> class D(B,C): pass ... >>> x = D() >>> x.attr 1 新式类继承搜索程序是宽度优先 新式类:搜索顺序是(D,B,C,A) >>> class A(object): attr = 1 ... >>> class B(A): pass ... >>> class C(A): attr = 2 ... >>> class D(B,C): pass ... >>> x = D() >>> x.attr 2   3.

如何在Python中设置环境变量

断了今生、忘了曾经 提交于 2020-01-09 13:40:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我需要在python脚本中设置一些环境变量,并且我希望从python调用的所有其他脚本(shell脚本)(将是子进程)来查看设置的环境变量。 该值为数字。 如果我做 os.environ["DEBUSSY"] = 1 ,它抱怨说 1 必须是字符串。 我还想知道一旦设置好如何在python(在脚本的后半部分)中读取环境变量。 #1楼 您可以使用 os.environ 词典来访问环境变量。 现在,我遇到的一个问题是,如果我尝试使用 os.system 运行用于设置环境变量的批处理文件(在**。bat *文件中使用SET命令),则它实际上不会为python环境设置它们(但对于使用 os.system 函数创建的子进程)。 为了实际获取在python环境中设置的变量,我使用以下脚本: import re import system import os def setEnvBat(batFilePath, verbose = False): SetEnvPattern = re.compile("set (\w+)(?:=)(.*)$", re.MULTILINE) SetEnvFile = open(batFilePath, "r") SetEnvText = SetEnvFile.read()

【编程小白的第一本python入门书】 --学习笔记

拜拜、爱过 提交于 2020-01-08 00:35:08
前言 一直都想学Python,之前粗略看过【Python学习手册(第4版)】,现在基本忘光了(毕竟没怎么用它来写代码)。重新翻开这本书时感觉有些老了,于是随便找了本先看着,快要读完时发现了宝藏——【Python语言程序设计】(据说是斯坦福大学的教材),等这本书看完后再拿那本书巩固、补充好了。 初识变量 变量 用法:变量 = 赋值内容 answer = 42 print() 用法:print(内容) print(answer) print('hello world!') 文件的写入方法 file = open('D:/PythonCode/file.txt', 'w') file.write('hello world') 字符串 用法 可用单引号、双引号或三个引号(连接换行的文本)来表示 连接 what_he_does = ' plays ' his_instrument = 'guitar' his_name = 'Robert Johnson' artist_intro = his_name + what_he_does + his_instrument print(artist_intro) 类型转换 num = 1 string = '1' num2 = int(string) print(num + num2) 乘法 words = 'words' * 3 print

Python属性和内建属性

雨燕双飞 提交于 2020-01-07 23:59:24
属性property 1. 私有属性添加getter和setter方法 class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型数字") 2. 使用property升级getter和setter方法 class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型数字") money = property(getMoney, setMoney) 运行结果: In [1]: from get_set import Money In [2]: In [2]: a = Money() In [3]: In [3]: a.money

python(继承)

*爱你&永不变心* 提交于 2020-01-07 22:44:06
python中继承分为单继承或多继承。父类称为基类。 子类继承了父类的所有属性。 子类调用属性时,先在自己的属性中找,找不到才到父类属性中找。 # -*- coding: utf-8 -*- class Dad: '这个是父类' money=100 def __init__(self,name): print('父亲') self.name=name def Play(self): print('%s正在工作'%self.name) #单继承==>子类(父类) class Son(Dad): money = 2000 print(Dad.money) print(Son.money) son_1=Son('小明') son_1.Play() print(son_1.name) 子类和父类存在相同属性情况 # -*- coding: utf-8 -*- class Dad: '这个是父类' money=100 def __init__(self,name): print('父亲') self.name=name def Play(self): print('%s正在工作'%self.name) #单继承==>子类(父类) class Son(Dad): money = 2000 def __init__(self,name,age): self.name=name self.age

对python中元类的理解

橙三吉。 提交于 2020-01-07 22:39:45
1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object = ObjectCreator() >>> print my_object <__main__.ObjectCreator object at 0x8974f2c> 但是,Python中的类还远不止如此。类同样也是一种对象。是的,没错,就是对象。只要你使用关键字class,Python解释器在执行的时候就会创建一个对象。 下面的代码段: >>> class ObjectCreator(object): … pass … 将在内存中创建一个对象,名字就是ObjectCreator。这个对象(类对象ObjectCreator)拥有创建对象(实例对象)的能力。但是,它的本质仍然是一个对象,于是乎你可以对它做如下的操作: 你可以将它赋值给一个变量 你可以拷贝它 你可以为它增加属性 你可以将它作为函数参数进行传递 下面是示例: >>> print ObjectCreator # 你可以打印一个类,因为它其实也是一个对象 <class '__main__.ObjectCreator'> >>> def echo(o): … print o … >>> echo

对python中元类的理解

心已入冬 提交于 2020-01-07 21:57:49
1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object = ObjectCreator() >>> print my_object <__main__.ObjectCreator object at 0x8974f2c> 但是,Python中的类还远不止如此。类同样也是一种对象。是的,没错,就是对象。只要你使用关键字class,Python解释器在执行的时候就会创建一个对象。 下面的代码段: >>> class ObjectCreator(object): … pass … 将在内存中创建一个对象,名字就是ObjectCreator。这个对象(类对象ObjectCreator)拥有创建对象(实例对象)的能力。但是,它的本质仍然是一个对象,于是乎你可以对它做如下的操作: 你可以将它赋值给一个变量 你可以拷贝它 你可以为它增加属性 你可以将它作为函数参数进行传递 下面是示例: ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' >>> print ObjectCreator # 你可以打印一个类

python 类的使用原则

你离开我真会死。 提交于 2020-01-07 20:34:14
Class 的继承分类 单继承链/无重叠的继承链/有重叠的继承链 class 的继承算法 深度优先算法 :        1. 把根节点压入栈中        2.每次从栈中弹出一个元素 ,搜索所有在它下一级的元素 ,将这些元素压入栈中 ,        3 重复 1和 2 C3算法: 公式: L(object)=[object] L(子类(父类1,.父类2))=[子类]+ merge(L(父类1,.父类2),[父类1,父类2]) merge算法 1 第一个列表的第一个元素是后续列表的第一个元素,或者后续列表中没有再次出现,则将这个元素合并到最终的解析列表中,并从当前操作的所有列表中删除 2. 如果不符合,则跳过此元素,查找下一个列表的第一个元素,重复1的判断规则 3. 如果最终无法把所有元素归并到解析列表,则报错 C3算法例子: import inspect class D: pass # L(D(object))= [D] + merge(L(object),[object]) # = [D] +merge(L[object],[object]) # = [D,object] + merge(L[], []) # = [D, object] class B(D): pass #L(B(object))= [B]+ merge(L(D),[D]) # = [B]+ merge(

Python--基础总结(二)

我与影子孤独终老i 提交于 2020-01-07 19:43:43
模块操作 什么是模块?—— .py结尾的文件就是我们说的模块 什么是包?—— 里面含有__init__.py文件的目录(文件夹) 模块导入 import 模块名 import 模块名 as 别名 from 模块名 import 函数/变量/类 from 模块名 import * ------(*号就是表示导入所有) 包导入 from 包名 import 模块名 from 包名.模块名 import 函数/变量/类 文件操作 异常处理 异常捕获语句 try:有可能出现异常的代码----输入语句/文件打开/网络请求 except:捕获到异常之后的处理方案 else:没有捕获到异常就执行 finally:无论是否发生异常,都一定会执行 指定捕获多个异常 捕获所有类型常见异常 断言:assert 抛出异常:raise 使用异常捕获后一定要记得 raise异常 ,不然程序无法识别异常!! 面向对象 类的定义&创建对象 属性 方法 初始化方法 __init__函数,创建对象的时候会自动调用,通过整个方法初始化设置实例属性 继承 如何继承?----定义类的时候,类名后括号里写上继承的父类, class user(A)---user这个类就会继承A这个类,一个类可以多重继承 继承的作用----获取父类的属性和方法,除了私有属性(多重继承,就能获取到所有继承的父类的属性和方法) 方法重写和调用