Python基础知识-pycharm版-06

nonlocal 关键字

nonlocal 用来声明外层的局部变量
global 用来声明全局变量
nonlcoal是针对于内部函数的,是在外部函数定义,内部函数可以使用的变量。

def outer_fuction()
	d=10
	def inner_fuction
		nonlocal d#这样就可以使用外部函数的变量
		a=d+1

LEGB规则

python在查找“名称”时,是按照LEGB规则进行查找。
L:local函数或者类的方法内部
E:Enclosed嵌套函数
G:Global模块中的全局变量
B:Built inPython 为自己保留的特殊名称
python会按照这个顺序查找,如果没有对应的名字就会报错。对于同一个名字,多次在不同位置赋值的时候,就可以根据这个顺序推断出输出。

面向对象

python可以面向过程、面向对象、函数式编程等多种编程范式。
面向对象编程是将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高编程效率。
面向过程适合小程序,是逻辑流程;面向对象适合复杂的程序,是一个设计思维。

类的定义

对象是通过类产生的。
一个类结构中包含方法(函数)即行为、属性(变量)即状态。
一个对象结构包含方法(由同一个类创建的所有对象共享)即行为、属性(每个对象维持自己的属性)即状态。
定义类的语法格式如下

class 类名
	类体

1.类名必须符合标识符的命名规则;一般规定首写字母大写,多个单词使用驼峰原则。
2.类体中我们可以定义属性和方法。
3.属性用来描述数据,方法(即函数)用来描述这些数据相关的操作。
python中属性需要定义到特殊的方法中 def init(self):
例子:

class MyMessage:
	def __init__(self,name,age,type):#self必须位于第一个参数
		self.name=name
		self.age=age
		self.type=type
	def temmie_introduce(self):#self必须
		print('这是{1}岁的{2},它叫{0}'.format(self.name,self.age,self.type))

a=MyMessage('temmie',18,'dog')
a.temmie_introduce()

老单身狗了。
在这里插入图片描述
下面调用的第一句话:a=MyMessage(‘temmie’,18,‘dog’)就是调用了类名的构造方法。上面属性中的self就指创建的对象本身。

init()构造函数

这是构造函数的指定写法。
第一个参数必须为self。写法参考上面的格式即可。

实例属性

实例属性从属于实例独享的属性,也称为实例变量。
1.实例属性一般在__init__()方法中通过下面代码定义:
self.实例属性名=初始值
2.在本例的其他实例方法中,也可以通过self进行访问:
self.实例属性名
3.创建实例对象后,通过实例对象访问:

obj01=类名()#创建对象,调用__init__()初始化属性
obj.实例属性名=#可以给已有属性赋值,也可以新加属性。

实例方法

实例方法是从属于实例对象的方法。
实例方法的格式:

def 方法名(self,[参数列表]):
	函数体

调用:

对象.方法名([实例列表])

定义实例时,第一个参数必须是self;调用时不需要给self传参。
函数和方法的区别:1.都是用来完成一个功能的语句块,本质一样。2.方法调用上,通过对象来调用。方法从属于特定实例对象,普通函数没有这个特点。3.直观上,方法定义需要传递self,函数不需要。
其他的操作

语法功能
dir(obj)获得对象的所有属性、方法
obj.dict对象的属性字典
pass空语句
isinstance(对象,类型)panduan “对象"是不是"指定类型”
isinstance(a1,MyMessage)#判断a1是否是MyMessage类型

类对象

似乎要表达的意思就是创建的类就是一个模子,你可以重新给这个模子起名,然后用新名字来调用它。
也就是说:你定义了一个MyMessage的类,可以通过m=MyMessage,然后调用时写a=m.函数名 来使用。

类属性

与实例属性和实例方法类似,不过类属性和类方法属于类的。它可以被所有实例对象共享。

类方法

从属于类的方法。
类方法通过装饰器@classmethod来定义,必须位于方法上面一行。

@classmethod
def 类方法名(cls ,[参数列表]):#这里的cla默认固定即可
	函数体

调用类方法格式:

类名.类方法名(参数列表)#这里面不需要给cls的值

类方法中访问实例属性和实例方法会报错
子类继承父类方法时,传入cs是子类对象,而非父类对象

静态方法

python中允许定义与‘类对象’无关的方法,称为静态方法。
静态方法通过装饰器@staticmethod来定义:

@staticmethod
def 静态方法名(参数列表):
	函数体

静态方法访问实例对象和实例方法会报错。

总览

在这里插入图片描述

import time
class MyMessage:
	lp='China'
	num=0
	@classmethod
	def ans(cls):
		print('共收到{0}条消息'.format(MyMessage.num))
	@staticmethod
	def time_ans():
		print(time.time())
	def __init__(self,name,age,type):#self必须位于第一个参数
		self.name=name
		self.age=age
		self.type=type
		MyMessage.num=self.num+1
	def introduce(self):#self必须
		print('第{3}名是来自{4}的{1}岁的{2},它叫{0}'.format(self.name,self.age,self.type,self.num,self.lp))
m=MyMessage
a=m('temmie',18,'dog')
a.introduce()
b=m('temmie',23,'single_dog')
b.introduce()
MyMessage.time_ans()
MyMessage.ans()

在这里插入图片描述

__del__析构函数

用于实现对象被销毁时所需的操作,关闭文件、关闭连接等。
python有自动垃圾回收机制,当对象没有被引用时(引用计数为0),由垃圾回收期调用__del__方法。我们也可以通过del语句删除对象来调用__del__方法。

__call__方法和调用对象

实现对对象像函数一样调用。
我目前的理解就是当做一个实例方法处理就可以了,写全了就是:a.call(),不过.__call__可省略,于是a()就可以表示这个方法了。
例:

class TemmieCount:
	l='temmie_count'
	num=0
	def __call__(self):
		print('temmie')
		an=('{3} 收到了!!第{2}条记录 顾客:{0} 号码:{1}'.format(self.name,self.number,TemmieCount.num,TemmieCount.l))
		return an
	def __init__(self,name,number):
		self.name=name
		self.number=number
		TemmieCount.num=TemmieCount.num+1
	def temmie_call(self):
		print('temmie!temmie!!temmie!!!')
a=TemmieCount('temmie1024',1024)
print(a.__call__())
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值