python 类的基础详解与应用

目录
  • 类的定义
  • 类对象
  • 变量
    • 类变量
    • 局部变量
    • 实例变量
    • 私有变量
  • 类的方法
    • 特殊方法
  • 继承
    • 单继承
    • 多继承

类的定义

# 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.__name

AttributeError: 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类

到此这篇关于python 类的基础详解与应用的文章就介绍到这了,更多相关python 类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中子类与父类的关系基础知识点

    在对于python中类的使用上,我们分出了子类和父类两种.对于这二者之间的关系,我们可以简单理解为继承.不过python中加入了实例的讨论,那么对于继承后的子类来说,父类的实例是否被继承又是我们所需要思考的问题.下面我们就子类和父类进行简单介绍,然后就二者之间的继承关系重点分析. 1.概念 子类和父类主要描述的是类之间的继承关系,即所属关系.继承的类可在被继承的类的基础上添加格外的参数和行为,新类称为子类,扩展类:被继承的类称为基类.父类或者超类. 2.继承关系 子类与父类的关系是 "is&qu

  • python基础之类方法和静态方法

    目录 类方法 静态方法 复习 总结 类方法 class People: country='China' # 类方法 用classmethod来修饰 @classmethod #通过标识符来表示下方方法为类方法 def get_country(cls): #习惯性使用cls return cls.country #访问类属性 pass pass print(People.get_country()) #通过类对象去引用 p=People() print('实例对象访问%s'%p.get_count

  • Python基础之元类详解

    1.python 中一切皆是对象,类本身也是一个对象,当使用关键字 class 的时候,python 解释器在加载 class 的时候会创建一个对象(这里的对象指的是类而非类的实例) class Student: pass s = Student() print(type(s)) # <class '__main__.Student'> print(type(Student)) # <class 'type'> 2.什么是元类 元类是类的类,是类的模板 元类是用来控制如何创建类的,

  • python基础之类属性和实例属性

    属性:类属性和实例属性 类属性:就是类对象所有的属性 小结 '类属性 是可以 被 类对象和实例对象共同访问的 实例属性只能由实例对象访问 class Student: name='黎明' #属于类属性 就是Student类对象所拥有的 def __init__(self,age): self.age=age #实例属性 pass pass lm=Student(17) print(lm.name) #通过实例对象去访问类属性 print(lm.age) class Student: name='

  • Python基础知识学习之类的继承

    一.继承的格式 类的继承格式如下,括号中的为父类名. class 类名(父类名): 代码 二.单继承 下面我们让Man继承自Master类,并调用继承的showSkill方法. class Master(): def __init__(self): self.skill='炒菜' def showSkill(self): print(self.skill) class Man(Master): pass man=Man() man.showSkill() 炒菜 三.多继承 我们可以在括号中写入多

  • python基础之面对对象基础类和对象的概念

    简称oop 复习 面向对象编程,简称oop [object oriented programming] 是一种python的编程思想 面向过程:按照解决问题的步骤去写代码,[根据业务逻辑去写代码] 面向对象编程:将数据与函数绑定在一起 在思考问题的时候,首秀按分析'怎么按照步骤实现'然后将问题解决拆解成若干个步骤,并将步骤对应成方法一步一步的最终完成功能 面对对象:关注的是设计思维 面向过程不适合做大项目,面向对象更加合适 类和对象 类:类是具有一组 相同或相似特征[属性]和行为[方法]的一系列

  • Python基础知识之函数,类,模块

    目录 1.Function 函数 1)定义函数 2)参数设置 3)全局和局部变量 2.Class类 1)定义class 2)class的功能 3)继承 4)私有属性和功能 5)特殊方法 3.Module模块 1)引用module 2)大项目的模块管理 总结 1.Function 函数 编程中,需要重复写的功能,可以包装成一个函数 1)定义函数 定义函数之前,实现给一个字符串增加前缀和后缀的操作: f1 = "f1" f2 = "f2" f1 += ".tx

  • python 类的基础详解与应用

    目录 类的定义 类对象 变量 类变量 局部变量 实例变量 私有变量 类的方法 特殊方法 继承 单继承 多继承 类的定义 # class是定义类的关键字,ClassName为类的名称 class ClassName: # 在这里写其他内容 pass class ClassName(object): # 在这里写其他内容 pass 这是一个最简单的类定义,在python3后类定义一般都会继承object类,不过不继承也没有多大的问题. 类对象 类对象也称实例 # 这就是创建了一个类对象(实例),a是

  • Python语法概念基础详解

    目录 Python之禅: Python基础: 1. 进制转换: 2. 数据类型: 3. 单双引号转义字符的使用: 4.单双三引号的转义换行: 5.字符串的运算: 6.组的概念与含义: 7.集合: 8.系统关键字与引用的可变性和值的不可变性: 9.逻辑运算符: 10.分支,条件,循环,枚举,包,模块,函数: 11.面向对象基本知识: 12.运算符优先级问题: 13.代码自动调节工具pep8: 14.python库的安装: 15.解决pip超时问题: 总结 (本章节主要是一些python的基础语法,

  • Python装饰器基础详解

    装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一个函数的返回结果.相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用. 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自己编写新的装饰器的更多高级语法. 什么是装饰器 装饰是为函数和类指定管理代码的一种

  • Python基础详解之描述符

    一.描述符定义 描述符是一种类,我们把实现了__get__().__set__()和__delete__()中的其中任意一种方法的类称之为描述符. 描述符的作用是用来代理一个类的属性,需要注意的是描述符不能定义在被使用类的构造函数中,只能定义为类的属性,它只属于类的,不属于实例,我们可以通过查看实例和类的字典来确认这一点. 描述符是实现大部分Python类特性中最底层的数据结构的实现手段,我们常使用的@classmethod.@staticmethd.@property.甚至是__slots__

  • python魔法方法-属性转换和类的表示详解

    类型转换魔法 类型转换魔法其实就是实现了str.int等工厂函数的结果,通常这些函数还有类型转换的功能,下面是一些相关的魔法方法: •__int__(self) •转换成整型,对应int函数. •__long__(self) •转换成长整型,对应long函数. •__float__(self) •转换成浮点型,对应float函数. •__complex__(self) •转换成 复数型,对应complex函数. •__oct__(self) •转换成八进制,对应oct函数. •__hex__(s

  • 对python模块中多个类的用法详解

    如下所示: import wuhan.wuhan11 class Han: def __init__(self, config): self.batch_size = config.batch_size self.num_steps = config.num_steps class config: batch_size = 10 num_steps = 50 if __name__ == '__main__': han = Han(config) print(han.batch_size) pr

  • Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象技术简介 •类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. •方法:类中定义的函数. •类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. •数据成员:类变量或者实例变

  • 把JSON数据格式转换为Python的类对象方法详解(两种方法)

    JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下: {"Name": "Tom", "Sex": "Male", "BloodType": "A", "Hobbies": ["篮球", "足球"]} 我需要把这个转换为具

  • Python基础详解之邮件处理

    一.发送电子邮件 Python标准库提供了smtplib,用于实现SMTP协议发送邮件.标准库还提供email模块帮助我们构建邮件格式.SMTP(Simple Mail Transfer Protocol,即简单邮件传输协议),是一组有源地址到目的地址传送邮件的规则,用来控制信件的中转方式. 获取QQ邮箱密码(授权码) 二.发送纯文本格式的邮件 import smtplib from email.mime.text import MIMEText from email.header import

  • Python基础详解之列表复制

    一.前言 Python中列表的复制分为几种情况: 直接赋值 浅复制 深复制 下面通过实例分析一下这几种情况的区别. 二.直接赋值 a = [11, 22, 33] b = a print(id(a), id(b)) b[0]=1 print(a,b) 输出结果为如下所示,发现内存地址没有发生变化,b只是a的引用,通过b更改列表的值时,a同时做修改. 三.用切片赋值 a = [11, 22, 33] b = a[:] print(id(a), id(b)) b[0]=1 print(a,b) 输出

随机推荐