python继承

Python学习27:类和实例

不问归期 提交于 2020-03-01 21:40:22
今天开始一次新的学习,Python中very重要的知识点,面向对象 首先还是创建项目和Directory。可能有同学会感兴趣为啥我会这么麻烦,每次创建项目啥的,我只能说,这是一种学习习惯,因为你在学习的过程中注定会有很多各式各样的代码,而我们为了整合这些代码,通常会把这些代码集中起来保存。我个人比较喜欢这样的习惯。 创建项目SixthDemo,然后创建Directory-com.sixth.class_instance,在这下面创建Demo01.py 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。 仍以Student类为例,在Python中,定义类是通过class关键字: class Student ( object ) : pass class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。 定义好了Student类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现的: >> > bart = Student ( )

python学习-[小甲鱼]零基础入门教学

谁都会走 提交于 2020-03-01 17:49:00
《零基础入门学习Python》(小甲鱼)学习记录 3月1日 P46魔法方法:属性访问 getattr setattr delattr property >>> class C: def __init__(self, size=10): self.size = size def getSize(self): return self.size def setSize(self, value): self.size = value def delSize(self): del self.size x = property(getSize, setSize, delSize) __getattr__(self,name)定义当用户视图获取一个不存在的属性时的行为 __getattribute__(self,name) 定义当该类的属性被访问时的行为 __setattr__(self,name,value) 定义当一个属性被设置时的行为 __delattr__(self,name) 定义当一个属性被删除时的行为 >>> class C: def __getattribute__(self,name): print("getattribute") return super().__getattribute__(name) def __getattr__(self, name): print(

python多继承

穿精又带淫゛_ 提交于 2020-03-01 16:49:34
python支持多继承 通过__mro__可查找继承列表,他是根据mro算法排列继承顺序 按照 __mro__ 的输出结果 从左至右 的顺序查找可继承方法 来看一个例子 class Base: def __init__(self): print("Base") class Human(Base): def __init__(self): super().__init__() print("Human") class Job(Base): def __init__(self): super().__init__() print("Job") class Teacher(Human, Job): def __init__(self): super().__init__() print("Teacher") if __name__ == "__main__": teacher = Teacher() print(Teacher.__mro__) 结果: Base Job Human Teacher (<class '__main__.Teacher'>, <class '__main__.Human'>, <class '__main__.Job'>, <class '__main__.Base'>, <class 'object'>) 来源: https://www.cnblogs

Python 【类的多态】

徘徊边缘 提交于 2020-03-01 13:45:48
一.多态 #类的多态 class Animal(object): #Animal类继承object def __init__(self,color): self.color = color def eat(self): print("动物在吃!") def run(self): print("动物在跑") class Cat(Animal): #Cat继承Aninal 继承[属性和方法] def eat(self): #方法重名 print("猫仔!") class Dog(Animal): #继承时候,方法重名用子方法 def __init__(self,name,age,color): super(Dog,self).__init__(color) #super表示父类,调用父类的初始化方法 self.name = name self.age = age def eat(self): #方法重名 print("狗仔!") #多态 def feed(obj): obj.eat() #对象作为参数传入 an = Animal("黄") cat = Cat("橘黄") dog = Dog("小黑",12,"黑色") feed(an) feed(cat) feed(dog) 上面有三种类,Animal类、Cat类、Dog类,三种类中都有共同的方法eat() 使用方法 def feed

Python基础知识学习_Day8

醉酒当歌 提交于 2020-03-01 06:03:42
一、类的扩展方法 1.静态方法 语法:@staticmethod,静态方法不能访问公有属性,不能访问类。可在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量。 1 class eat(object): 2 def __init__(self,name): 3 self.name = name 4 @staticmethod #静态方法不能访问共有属性、不能访问实例 5 def eat(name,food): 6 print("%s is eating..%s" %(name,food)) 7 p.eat("alex","food") 2.类方法 语法:@classmethod,只能访问类的公有属性,不能访问实例属性。 1 class Dog(object): 2 name = "我是类变量" 3 def __init__(self,name): 4 self.name = name 5 6 @classmethod 7 def eat(self): 8 print("%s is eating" % self.name) 9 10 11 12 d = Dog("ChenRonghua") 13 d.eat() 14 15 16 #执行结果 17 18 我是类变量 is eating 3.属性方法 语法:@property 把一个方法变成静态属性 1 class

Python全栈工程师(多继承、函数重写)

雨燕双飞 提交于 2020-02-29 11:11:38
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰   开局一张图                        Python人工智能从入门到精通 补充:   对象 -------------------------> 类 实例变量(属性)      类变量 实例方法          类方法( @classmethond) 静态方法( @staticmethond)(类内普通函数) 继承/派生   单继承:   一个子类只有一个父类   一个父类可以有多个子类 -------------------------------------------------------------------------------------------- 用于类的函数:    issublclass (cls, cls_or_tuple)    判断 这个类 是否继承自其他类 , 如果此cls是class   或 tuple中的一个派生子类 , 返回 True 否则返回 False 示例:   class A:     pass   class B(A):     pass   class C(B):     pass issublclass(C, B) # True issublclass(B, C) # False issublclass(C, (int,

Python:使用threading模块实现多线程(转)

ぐ巨炮叔叔 提交于 2020-02-29 08:58:11
Python:使用threading模块实现多线程(转) 分类: python 标签: thread 评论: 暂无评论 阅读:5,420 views 综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势。 在Python中我们主要是通过thread和 threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用 threading模块实现多线程编程。这篇文章我们主要来看看Python对多线程编程的支持。 在语言层面,Python对多线程提供了很好的支持,可以方便地支持创建线程、互斥锁、信号量、同步等特性。下面就是官网上介绍threading模块的基本资料及功能: 实现模块 thread:多线程的底层支持模块,一般不建议使用; threading:对thread进行了封装,将一些线程的操作对象化 threading模块 Thread 线程类,这是我们用的最多的一个类,你可以指定线程函数执行或者继承自它都可以实现子线程功能; Timer与Thread类似,但要等待一段时间后才开始运行; Lock 锁原语,这个我们可以对全局变量互斥时使用; RLock

python入门教程:实现打砖块小游戏代码实例

僤鯓⒐⒋嵵緔 提交于 2020-02-29 00:12:33
这篇文章主要介绍了Python打砖块小游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 这次用Python实现的是一个接球打砖块的小游戏,需要导入pygame模块,有以下两条经验总结: 1.多父类的继承2.碰撞检测的数学模型 知识点稍后再说,我们先看看游戏的效果和实现: 一、游戏效果 二、游戏代码 #导入模块 import pygame from pygame.locals import * import sys,random,time,math class GameWindow(object): '''创建游戏窗口类''' def __init__(self,*args,**kw): self.window_length = 600 self.window_wide = 500 #绘制游戏窗口,设置窗口尺寸 self.game_window = pygame.display.set_mode((self.window_length,self.window_wide)) #设置游戏窗口标题 pygame.display.set_caption("CatchBallGame") #定义游戏窗口背景颜色参数 self.window_color = (135,206,250) def backgroud(self)

python装饰器

无人久伴 提交于 2020-02-28 21:57:55
python装饰器的学习理解 自己的理解   装饰器是python语言中的高阶函数,被装饰的函数嵌套在装饰器内部,其目的可实现对被装饰函数的功能扩充。 举个例子,加深理解   任务:完成对执行函数func1的执行时间的记录 不用装饰器实现 # -*- coding: utf-8 -*-import timedef func1(): s_time = time.time() time.sleep(1) e_time = time.time() print "执行func1 需要时间 %s" % (e_time - s_time) if __name__ == "__main__": func1() ######执行结果如下######## 执行func1 需要时间 1.00396990776 但是这样写问题是: 如果类似对func1增加记录执行时间的函数很多,怎么办,难道要所有都修改一遍函数内的代码么,这太low,改进一下,把记录执行时间的功能做成一个函数,如下所示 # -*- coding: utf-8 -*-import time def get_time(func): s_time = time.time() func() e_time = time.time() print "执行%s 需要时间 %s" % (func.__name__, (e_time - s_time))

【Python进阶】5-4 __slots__ / __call__

喜你入骨 提交于 2020-02-28 17:44:04
文章目录 1、前言 2、使用__slots__ 3、使用__call__ 1、前言 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。 先定义class: class Student ( object ) : pass 然后,尝试给实例绑定一个属性: >> > s = Student ( ) >> > s . name = 'Michael' # 动态给实例绑定一个属性 >> > print ( s . name ) Michael 还可以尝试给实例绑定一个方法: >> > def set_age ( self , age ) : # 定义一个函数作为实例方法 . . . self . age = age . . . >> > from types import MethodType >> > s . set_age = MethodType ( set_age , s ) # 给实例绑定一个方法 >> > s . set_age ( 25 ) # 调用实例方法 >> > s . age # 测试结果 25 但是,给一个实例绑定的方法,对另一个实例是不起作用的: >> > s2 = Student ( ) # 创建新的实例 >> > s2 . set_age ( 25 ) # 尝试调用方法