python继承

Python魔法方法(二)

三世轮回 提交于 2020-01-11 07:57:23
类的表示 使用字符串来表示类是一个相当有用的特性。在Python中有一些内建方法可以返回类的表示,相对应的,也有一系列魔法方法可以用来自定义在使用这些内建函数时类的行为。 __str__(self) 定义对类的实例调用 str() 时的行为。 __repr__(self) 定义对类的实例调用 repr() 时的行为。 str() 和 repr() 最主要的差别在于“目标用户”。 repr() 的作用是产生机器可读的输出(大部分情况下,其输出可以作为有效的Python代码),而 str() 则产生人类可读的输出。 __unicode__(self) 定义对类的实例调用 unicode() 时的行为。 unicode() 和 str() 很像,只是它返回unicode字符串。注意,如果调用者试图调用 str() 而你的类只实现了 __unicode__() ,那么类将不能正常工作。所有你应该总是定义 __str__() ,以防有些人没有闲情雅致来使用unicode。 __format__(self) 定义当类的实例用于新式字符串格式化时的行为,例如, “Hello, 0:abc!”.format(a) 会导致调用 a.__format__(“abc”) 。当定义你自己的数值类型或字符串类型时,你可能想提供某些特殊的格式化选项,这种情况下这个魔法方法会非常有用。 __hash__

九 Python面向对象

╄→尐↘猪︶ㄣ 提交于 2020-01-11 02:50:54
九 Python面向对象 1. 面向对象与面向过程 1-1. 介绍 面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计方法。 1-2. 概念及术语 术语 概念及介绍 类(Class) 用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对 象所共有的属性和方法。其中的对象被称作类的实例。 实例 也称对象。通过类定义的初始化方法,赋予具体的值,成为一个"有血有肉 的实体"。 实例化 创建类的实例的过程或操作。 实例变量 定义在实例中的变量,只作用于当前实例。 类变量 类变量是所有实例公有的变量。类变量定义在类中,但在方法体之外。 数据成员 类变量、实例变量、方法、类方法、静态方法和属性等的统称。 方法 类中定义的函数 静态方法 不需要实例化就可以由类执行的方法 类方法 类方法是将类本身作为对象进行操作的方法。 方法重写 如果从父类继承的方法不能满足子类的需求,可以对父类的方法 进行改写,这个过程也称override。 封装 将内部实现包裹起来,对外透明,提供api接口进行调用的机制。 继承 即一个派生类(derived class)继承父类(base class)的变量和方法。 多态 根据对象类型的不同以不同的方式进行处理。 1-3. 区别 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装

Python中抽象类的实现 Hackerrank Day 13: Abstract Classes

感情迁移 提交于 2020-01-10 21:13:30
在抽象类中定义抽象方法,无需实现功能 子类继承抽象类,但是必须定义抽象方法的具体功能 Hackerrank Example Code from abc import ABCMeta, abstractmethod class Book(object, metaclass=ABCMeta): ######### def __init__(self,title,author): self.title=title self.author=author @abstractmethod ######### def display(): pass ######### #Write MyBook class class MyBook(Book): def __init__(self,title,author,price): super().__init__(title,author) ######## self.price=price def display(self): ####### print('Title: '+self.title+'\nAuthor: '+self.author+'\nPrice: '+ str(self.price)) title=input() author=input() price=int(input()) new_novel=MyBook(title

python学习之面向对象高级特性和魔术方法

随声附和 提交于 2020-01-10 18:06:24
01_property商品应用.py 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。 类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数据库 中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求 数据时就要显示的指定获取从第start条到第end条的所有数据 这个分页的功能包括: • 根据用户请求的当前页和总数据条数计算出 start 和 end • 根据start 和 end 去数据库中请求数据 • 是否有上一页has_prev、下一页has_next • 上一页prev、下一页next • 总页数pages, 数据总条数total、当前页信息items """ class Pagintor(object): """实现商品分页的类""" def __init__(self, objects_list, page=1, per_page=5): """ :param objects_list: 商品列表 :param page: 当前需要显示的页码信息 :param per_page: 每页显示的数据个数 """ self.objects_list = objects_list self.page = page self.per_page = per_page @property def

Python笔记: slots用法解析

风流意气都作罢 提交于 2020-01-10 15:19:40
#!/usr/bin/env python3 #-*- coding:utf-8 -*- #slots用法解析: #默认情况下Python用一个字典来保存一个对象的实例属性,它允许我们在运行时去设置任意的新属性 #__slots__允许我们声明并限定类成员,并拒绝类创建__dict__和__weakref__属性以节约内存空间。 #子类未声明__slots__时,不继承父类的__slots__,即此时子类实例可以随意赋值属性 #子类声明__slots__时,继承父类的__slots__,即此时子类的__slots__为其自身+父类的__slots__ #如果父类存在__dict__属性,则其子类将继承__dict__;此时,即使该子类包含了__slots__属性,该子类的实例依然可以任意添加变量 #创建一个声明__slots__的子类,该类属性则只能创建父类__slots__+自身__slots__限定的属性 #python3中,不允许在类内定义跟slots里面的属性同名;在slots外面定义的属性是只读的; 如果T2继承自T(没有定义slots的父类),则slots失去了原有的含义 from memory_profiler import profile class T(object): def __init__(self, x, y): self.x = x self.y = y

Python的麻烦的多线程

眉间皱痕 提交于 2020-01-10 14:50:21
对于python的多线程,也就是threading模块,从开始学到现在,依旧觉得麻烦,对,依旧这么感觉。时隔已久,来整理一下。 线程对象的方法: Start() 开始线程的执行 Run() 定义线程的功能的函数 Join(timeout=None) 程序挂起,直到线程结束;如果给了timeout,则最多阻塞timeout秒 getName() 返回线程的名字 setName() 设置线程的名字 isAlive() 布尔标志,表示这个线程是否还在运行 isDaemon() 返回线程的daemon标志 setDaemon(daemonic) 把线程的daemon标志设为daemonic(一定要在start()函数前调用) t.setDaemon(True) 把父线程设置为守护线程,当父进程结束时,子进程也结束。 threading类的方法: threading.enumerate() 正在运行的线程数量 两种创建多线程的方式 使用Thread()函数创建线程。 import threading import time # 多线程A def fun(i): print(str(i) + "\t" + time.strftime('%X')) for i in range(10): t = threading.Thread(target=fun, args=(i,)) t.start()

Python--面向对象进阶

蹲街弑〆低调 提交于 2020-01-10 13:51:26
一、元类 元类是类的类,是类的模板;元类的实例为类,正如类的实例为对象。类也是对象。 类的本质是对象, 于是可以对类做如下的操作: 你可以将它赋值给一个变量 你可以拷⻉它 你可以为它增加属性 你可以将它作为函数参数进行传递 因为类也是对象,运行时在函数中使用class关键字动态的创建类。 1、通过分支语句动态的创建类 def create_class ( name ) : if name == 'foo' : class Foo ( object ) : pass return Foo else : class Bar ( object ) : pass return Bar cls = create_class ( name = 'foo1' ) print ( cls . __name__ ) Bar 2、通过type函数动态创建类 type函数功能一: 判断对象的类型。 type函数功能二: 动态的创建类。type可以接受一个类的描述作为参数,然后返回一个类。 type函数语法: type(类名,父类名称的元组, 属性信息) def hello ( self ) : print ( "hello" ) Person = type ( 'Person' , ( object , ) , { 'country' : 'China' , 'hello' : hello } ) p1

Python与多线程

≡放荡痞女 提交于 2020-01-10 12:42:36
感谢这位博主帮我打开了多线程的门 https://blog.csdn.net/m0_38011218/article/details/81938261 首先我之前学的java多线程,在java.lang包中有thread类。我们只要集成这个类然后start()。很简单有四种方式 详细见 https://www.cnblogs.com/shoshana-kong/p/9071602.html python具有异曲同工之妙 函数方式;就是简单调用库中的方法 import threading import time def sing(num): for i in range(num): print("sing%d" % i) time.sleep(1) def dance(num): for i in range(num): print("dancd%d" % i) time.sleep(1.5) if __name__ == '__main__': t_sing = threading.Thread(target=sing, args=(5, )) t_dance = threading.Thread(target=dance, args=(5, )) t_sing.start() t_dance.start() time.sleep()是为了让运行的顺序明显一点 第二种继承方式:

在学python?type、object、class这些不了解一下吗?

给你一囗甜甜゛ 提交于 2020-01-10 11:16:57
在Python的学习中我们肯定会听到一句话: 「python中一切皆对象」 。 如果再接着学习下去的话,我们就会接触到Python中的type, object, class等概念。网上也有不少文章阐述了这三者之间的关系,但是在看了大部分文章之后我还是似懂非懂,感觉就像有什么东西卡在了喉咙一直咽下不去一样。 于是为了能让自己晚上顺利吃上饭,我立马对着搜索引擎就是一顿操作,终于赶在外卖小哥打响我电话之前,咽下了这几个如鲠在喉的概念,舒服! 趁着外卖小哥上楼这会,分享下我学习研究后的理解吧。 python中的对象 python作为面向对象的语言之一,符合一切基于面向对象理念的设计。在面向对象的体系中,对象存在着两种关系。 继承关系 简单来说即子类继承于父类,子类拥有其自身及父类的方法和属性,同名的子类方法和属性将会覆盖父类的方法和属性。 语义化的理解栗子为: 「蛇」类继承自「爬行动物类」,所以「蛇是一种爬行动物」,英文说「snake is a kind of reptile」 。 在python中的继承关系可以简单表示如下: class Reptile : title = '爬行动物' def crawl (self) : print(self.title) class Snake (Reptile) : def crawl_a (self) : print(self.title) p

Python中类的定义与使用

安稳与你 提交于 2020-01-10 05:35:47
转载自https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138682004077376d2d7f8cc8a4e2c9982f92788588322000 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。 仍以Student类为例,在Python中, 定义类是通过 class 关键字 : class Student(object): pass class 后面紧接着是类名,即 Student ,类名通常是大写开头的单词,紧接着是 (object) ,表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用 object 类,这是所有类最终都会继承的类。 定义好了 Student 类,就可以根据 Student 类创建出 Student 的实例, 创建实例是通过类名+()实现的 : >>> bart = Student() >>> bart <__main__.Student object at 0x10a67a590> >>> Student <class '__main__