一、类创建

class Animal:def setName(self,name):self.name=namedef getName(self):return self.name#创建动物猫的对象
cat=Animal()
cat.setName("cat")
#调用cat对象的属性name
print(cat.name)
#调用cat方法的getName方法
print(cat.getName())
#调用cat方法的getName方法 另一种方式
print(Animal.getName(cat))
  • 类的创建使用关键字class定义,类名跟在class之后
  • 类中的方法就是函数
  • 每一个方法中的第一个参数都是self,如果方法中有多个参数,第一个参数将作为self参数使用,在调用方法时,这个参数不用自己传入,系统会将方法所属的对象传入这个参数。
  • 调用对象方法的方式有两种,一种是直接通过对象调用;另一种是通过类调用,并且传入相应的对象。

二、方法的私有化

在Java这类语言中提供了private关键字,进行方法或者变量的私有化,但是在python中并没有提供,不过可以使用其它方式来达到这种效果,在python类的方法名前面加上“__”,可以杜绝外部访问这个类中的方法。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class FOO:def f1(self):return "我是f1"def __f2(self):return "我是f2"#类的内部是可以调用私有方法的def f3(self):return self.__f2()f=FOO()
f.f1()
f.__f2() #AttributeError: 'FOO' object has no attribute '__f2'

可以看到f2是私有方法,类外部不能进行访问,否则会抛出异常,而在类的内部是可以调用私有方法的。

f2是否是真的在类外部不能调用了呢?当然不是,实际上python编译器遇到"__"开头的方法会将方法名变成_ClassName__MethodName,照着这种形式调用,是可行的。

print(f._FOO__f2())#我是f2

另外,如果想查看类中的所有方法,应该如何做呢?

import inspect
methods=inspect.getmembers(f,predicate=inspect.ismethod)
print(methods)#[('_FOO__f2', <bound method FOO.__f2 of <__main__.FOO object at 0x0000000000676F28>>), #('f1', <bound method FOO.f1 of <__main__.FOO object at 0x0000000000676F28>>), #('f3', <bound method FOO.f3 of <__main__.FOO object at 0x0000000000676F28>>)]

三、类的继承

类的继承就是一个类从另一个类中获得所有的成员,父类的成员可以在子类中使用。新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class A:passclass B:passclass C(A): #单继承 C是派生类,A是基类passclass D(A,B):#多继承,继承多个类,中间以逗号分隔开pass

D类中会按照从左到右的顺序继承A类、B类中的成员,如果多个父类中有相同的成员,会按照父类书写的顺序继承,也就是说前面的父类会覆盖写在后面父类同名的方法。

四、检测继承关系

有时需要判断类与类之间是否有继承关系,这样可以利用父类中的方法,那么这种继承关系应该如何判断呢?可以使用issubclass函数进行判断,它接收2个参数,第一个是子类,第二个是父类,如果是继承关系返回True,否则返回False,间接的继承关系也是适用的。

class Fruits:passclass Apple(Fruits):passprint(issubclass(Apple,Fruits))#True

如果获取已知类的父类们,可以直接使用"bases",这是类的一个特殊属性

class Fruits:passclass Apple(Fruits):passprint(Apple.__bases__)#(<class '__main__.Fruits'>,)

五、类、类成员、对象的判断

a、hasattr()

判断对象或者类中是否存在某个成员

class Bar:def f1(self):pass
b=Bar()
print(hasattr(b,"f1"))#True
print(hasattr(Bar,"f1"))#True

b、getattr()

获取类中或对象中成员的值,它有三个参数第三个参数用于制定默认值

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Bar:def f1(self):pass
b=Bar()print(getattr(Bar,"f1"))#<function Bar.f1 at 0x0000000000535BF8>

c、setattr()

用于设置对象中成员的值,setattr函数有三个参数,前两个与getattr相同,第三个参数用于指定成员的值

#如果对象中有name属性,则更新该值,如果没有,会添加一个新的name属性,也可以更新或者添加类属性
setattr(b,"name","bright")
print(b.name)#bright

动态添加函数

class Bar:def f1(self):pass
b=Bar()####类添加f2函数####
def f2():print("动态添f2")
setattr(Bar,'f2',f2)
Bar.f2()  #类调用####对象添加f2函数###
def f2():print("动态添f2")
setattr(b,'f2',f2)
b.f2()  #对象调用

d、isinstance

用于判断实例和类之间的关系

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class A:print("A")class B(A):print("B")a=A()
b=B()print(isinstance(a,A))#True
print(isinstance(b,A))#True

六、多态

同类对象的多种形态,应用多态增加了程序的灵活性、扩展性。

实现多态的步骤:

  • 定义新的子类
  • 重写对应的父类方法
  • 使用子类的方法直接处理,不调用父类的方法
class Animal:def eat(self):passdef run(self):passclass Dog(Animal):def run(self):pass

简单的来说,Dog是新定义的子类,不想调用父类的run方法,需要执行自己的run方法,这就是多态,一个类产生的多个对象,调用同一个方法,产生不同的执行结果。

【Python教程】类及对象教程相关推荐

  1. Python基础(类与对象)

    Python基础(类与对象) 一.编程的两大思想 面向过程和面向对象 面向过程 面向对象 区别 事物比较简单,可以用线性的思维去解决 事物比较复杂,使用简单的线性思维无法解决 共同点:面向对象和面向过 ...

  2. Python基础——类与对象

    Python基础--类与对象 Python基础--类与对象 类与对象 数据类型 对象 类的创建 创建语法 类的创建 对象的创建 对象调用类中的内容 类属性,类方法,静态方法 类属性 访问类属性 类方法 ...

  3. Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

    Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...

  4. Python 的类(菜鸟教程)

    原文地址:http://www.runoob.com/python/python-object.html 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合 ...

  5. 给Python的类和对象动态增加属性和方法

    通常我们会将编程语言分为静态和动态.静态语言的变量是在内存中的有类型的且不可变化的,除非强制转换它的类型:动态语言的变量是指向内存中的标签或者名称,其类型在代码运行过程中会根据实际的值而定.Pytho ...

  6. python的类和对象_Python面向对象之类和对象实例详解

    本文实例讲述了Python面向对象之类和对象.分享给大家供大家参考,具体如下: 类和对象(1) 对象是什么? 对象=属性(静态)+方法(动态): 属性一般是一个个变量:方法是一个个函数: #类的属性 ...

  7. python的类和对象_Python类与对象实验

    一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. 二. ...

  8. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  9. Python进阶-----类、对象的相关知识

    一.声明类 class 类名: #一般类名的首字母大写 '类的文档字符串' 类体 例如创建一个中国人的类: 1 class Chinese: 2 '这是一个中国人的类' #类的文档字符串 3 name ...

最新文章

  1. 万字长文浅析SpringCould微服务负载均衡框架Ribbon源码(字多慎入)
  2. 解决requests-SSL: CERTIFICATE_VERIFY_FAILED]问题
  3. python 映射和反映射_python映射类型的相关介绍
  4. java迷您_Java
  5. opc读取ab的plc数据_C#读写 AB PLC 直接通过节点来读写数据 读写 AllenBradley PLC
  6. Python中的图书管理系统
  7. JAVA 他人博客收藏 (To be continue)
  8. 安装ADB Interface驱动
  9. 【KEIL-MDK】系列——如何使用PC-Lint代码检查工具
  10. 效率起飞?时下流行Sketch插件谁更“香”
  11. jsp写的简单购书网站
  12. java生成pdf旋转_如何使用Java旋转PDF文档中的图像?
  13. error launching app electron踩坑
  14. 没有扫描仪如何用PS把照片处理成扫描文件
  15. 机器视觉硬件——工业相机
  16. MyBatis读数据库出现很多字段都是null的问题
  17. 若依系统分离版去除redis数据库
  18. c语言规定整型变量长度,搞透C语言整型数据范围表示
  19. 多线程发生异常怎么处理咩?
  20. 益阳定制网站多少钱,益阳品牌网站建设多少钱

热门文章

  1. 分辨真假数据科学家的20个问题及回答
  2. 支持向量机(SVM)PPT
  3. 在翻译群里看到的一个句子的翻译
  4. 多比(SVG/VML)图形控件多比(SVG/VML)图形拓扑图控件免费下载地址
  5. vim括号操作(转)
  6. 自己做回CA 给别人发证
  7. 要速度更要方便!20款实用Chrome插件推荐
  8. 7系统启动到一半停止_太突然!国际饮料巨头计划狂砍一半品牌,这些饮料就快喝不到了…...
  9. 【转载】看板方式简介
  10. 【转】采购提前期概述