python 类的基础详解与应用
作者:不侠居 发布时间:2021-01-04 08:57:37
类的定义
# class是定义类的关键字,ClassName为类的名称
class ClassName:
# 在这里写其他内容
pass
class ClassName(object):
# 在这里写其他内容
pass
这是一个最简单的类定义,在python3后类定义一般都会继承object类,不过不继承也没有多大的问题。
类对象
类对象也称实例
# 这就是创建了一个类对象(实例),a是一个实例也是一个对象
a = ClassName()
变量
类内部里面有:类变量,局部变量,实例变量
类变量
类变量:所有类的实例化对象都同时共享类变量,也就是说,类变量在所有实例化对象中是作为公用资源存在的。
class ClassName(object):
# 定义一个类变量
name = "Tom"
类方法的调用方式有 2 种,既可以使用类名直接调用,也可以使用类的实例化(对象)调用。可以通过类名修改类变量的值,并且修改后,会影响所有的实例化的对象。
# 直接通过类名调用
print(ClassName.name)
# 创建类的实例(对象)
a = ClassName()
b = ClassName()
// 通过类的实例调用
print(a.name)
print(b.name)
ClassName.name = "Tim"
print(a.name)
print(b.name)
运行结果为:
Tom
Tom
Tom
Tim
Tim
但如果实例的类变量的值修改后,在通过类名修改变量的值,不会影响这个实例的类变量。
a = ClassName()
b = ClassName()
a.name = "asf"
ClassName.name = "Pig"
print(a.name)
print(b.name)
ClassName.name = "aaa"
print(a.name)
print(b.name)
运行结果:
asf
Pig
asf
aaa
通过运行结果可知,在对象a改变name值后,再调用Class Name.name = "Pig"
对象a的name变量值没有改变
局部变量
局部变量:局部变量只定义在类方法内,也只能在方法内使用
class ClassName(object):
# 这是一个方法
def function(self):
# 这是一个局部变量
name = "Tom"
name定义在类方法内,所以是局部变量,在外部是无法调用,只能在方法内使用。
实例变量
实例变量:以self.变量名的方式定义的变量,称为实例变量(属性)
class ClassName(object):
# 这是一个实例变量
def function1(self):
self.name = "Tom"
def function2(self):
print(self.name)
只作用于调用方法的对象,可以在其他方法内调用。
className = ClassName()
className.function()
运行结果:
Tom
如果定义在__init__()
方法中的实例变量,可以同过只能通过对象名访问。
class ClassName(object):
def __init__():
self.name = "Tom"
className = ClassName()
print(className.name)
运行结果:
Tom
私有变量
__name
这就是私有变量,在变量前面加两个_
,self.__name
也是私用变量,私有变量在类外部无法直接进行访问。
class ClassName(object):
# 定义了一个私有类变量
__name = "Tom"
ClassName.__name
运行结果:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-8-08830fea0534> in <module>
2 __name = "Tom"
3
----> 4 ClassName.__nameAttributeError: type object 'ClassName' has no attribute '__name'
类的方法
在类里面用def
关键字来定义方法,也叫函数。与普通方法的区别是,必须需要一个self
的参数,self
代表类自身
class ClassName(object):
def function(self,a):
pass
def
为定义函数的关键字,function
为函数的名称,
特殊方法
1.__init__()
用来初始化类的参数一般叫构造方法
这个方法,我们一般类都会用到。
class ClassName(object):
def __init__(self):
self.name = "aaa"
当类实例化时,会自动调用__init__
2.__call__()
将对象当做函数时调用。
class ClassName(object):
def __init__(self):
self.name = "aaa"
def __call__(self):
print("aaa")
c = ClassName() // 类实例化,执行了__init__()方法
c() //执行了__call__()方法
3、__get__()
类作为另一个类的属性时自动调用
class ClassName:
def __init__(self):
pass
def __get__(self,instance, owner):
print("__get__调用了")
class ClassName2:
a = ClassName()
运行结果:
__get__调用了
4、__new__()
是一种负责创建类实例的静态方法,且该方法会优先 __init__()
初始化方法被调用。
。。。还有很多其他的类特殊方法
继承
继承在生活中是获得父辈的财产,在编程语言中是获得父类的所有变量,方法。通过继承从类上衍生出新的类
单继承
简而言之,是继承一个类,所继承的类为基类(父类),继承者为子类
# 父类
class A:
pass
# 子类,继承了A类
class B(A):
pass
上面是个简单的继承,子类在类名后面的括号内写要继承的类的名称。
# 父类
class A:
name = "Tom"
def getName(self):
print("..")
# 子类,继承了A类
class B(A):
pass
b = B()
print(b.name)
b.getName()
运行结果:
Tom
..
发现B类没有写什么变量和方法,却调用了A类的变量(属性)和方法
当然如果不想要父类的某个变量或方法,可以重写这个变量或方法
# 父类
class A:
name = "Tom"
def getName(self):
print("..")
# 子类,继承了A类
class B(A):
def getName(self):
print("bbb")
b = B()
print(b.name)
b.getName()
运行结果:
Tom
bbb
多继承
多继承从名称上来看,是继承了多个类
class A:
pass
class B:
pass
class C(A, B):
pass
上面这个C类同时继承了A类,B类
来源:https://blog.csdn.net/m0_46778548/article/details/120977530


猜你喜欢
- 算法是计算机科学中一个重要的研究方向,是解决复杂问题的关键。在计算机世界中,算法无处不在。数据库是存储数据和执行大批量计算的场所,在数据库中
- 为你的网站,博客等添加rss聚合功能,给出rss.asp和rss.xml两种的聚合代码看过的朋友可帮忙顶哦,这些代码都是第一次发的,外面很多
- SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A')
- 对于路径中含有中文的图像,直接用cv2.imread读取会报错,上次看到有大佬使用cv2.imdecode就可以正常读取,有点好奇,所以今天
- 正则表达式有两种基本的操作,分别是匹配和替换。匹配就是在一个文本字符串中搜索匹配一特殊表达式;替换就是在一个字符串中查找并替换匹
- 今天select * from 表名 where to_days(时间字段名) = to_days(now());昨天SELECT * FR
- 我就废话不多说了,直接上代码吧!#!/usr/bin/env python# coding:UTF-8"""@
- 1.因为oracle 10g暂时没有与win7兼容的版本,我们可以通过对安装软件中某些文件的修改达到安装的目地。 a)打开“\ORACLE1
- 以下就是对超常用的PHP正则表达式进行的收集整理,为了方便大家更快更好的掌握php正则表达式。一、表单验证匹配验证账号,字母开头,允许 5-
- 本文实例为大家分享了python学生信息管理系统的具体代码,供大家参考,具体内容如下""" 程序名
- 什么是编码规范编码规范就是指导如何编写和组织代码的一系列标准。通过阅读这些编码规范,你可以知道在各个公司里代码是如何编写的。我们为什么需要编
- // 自动转换字符集 支持数组转换 function auto_charset($fContents, $from='gbk'
- 关于MySQL的事务隔离级别,相信很多读者都不陌生,网商有很多种相关的文章,很多人对于各种隔离级别,以及不同的级别可以解决的一些读现象都是如
- 前言:我们的vue代码打包上传到服务器之后,要是数据接口 以后换了域名什么的,是不是需要重新去vue文件里修改接口。能不能生成一个配置文件,
- 本文为大家分享了使用navicat将csv文件导入mysql的具体代码,供大家参考,具体内容如下1.打开navicat,连接到数据库并找到自
- 本文实例讲述了Python使用爬虫爬取静态网页图片的方法。分享给大家供大家参考,具体如下:爬虫理论基础其实爬虫没有大家想象的那么复杂,有时候
- 对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题。所以把PIP
- 相关文章推荐:各种loading加载图标下载 gif格式loadinfo和ajaxload一样,也是一个在线Ajax载入动画生成工
- 抽象类作用:抽象类就是控制子类的方法的名称,要求子类必须按照父类的要求的实现指定的方法,且方法名要和父类保持一致一、问题场景主要使用场景是这
- 很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有个模块collections(英文,收集、集合),