Python学习8--2022年4月2日

LEGB 规则

Python中查找名称时按照LEGB规则查找;即Local–>Enclosed–>Global–>Built in

  • Local 函数或者类的方法内部
  • Enclosed 嵌套函数(一个函数包裹另一个函数,闭包)
  • Global 模块中的全局变量
  • Built in Python为自己保留的特殊名称

面向对象和面向过程

主要针对大型软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好。
面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更接近人的思维,从而提高编程的效率。
Python是完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对象的基本功能,如继承、多态、封装等
Python中,一切皆对象。

将不同类型的数据、方法(即函数)放到一起,就是对象。我们通过类定义数据类型的属性(数据)和方法(行为),即:类将行为和状态打包在一起。
在这里插入图片描述
从一个类创建对象时,每个对象会共享这个类的行为(类中定义的方法),但会有自己的属性值(不共享状态)。即:方法代码是共享的,属性数据不共享。

定义类

class 类名:
	类体
  • 类名必须符合“标识符”的规则;一般规定首字母大写,多个单词使用“驼峰原则”
  • 类体中我们可以定义属性和方法
  • 属性用来描述数据,方法(即函数)用来描述这些数据相关的操作
class Student:
	def __init__(self, name, score):    # 构造方法第一个参数必须是 self
		self.name = name   # 实例属性 
		self.score = score
	
	def say_score(self):    #  实例方法且第一个参数必须是 self
		print(self.name, '的分数是:', self.score)

S1 = Student('王三', 50)   # S1是实例对象,自动调用__init__()方法
S1.say_score()

---------------王三的分数是50

构造方法(函数) init()

类是抽象的,也称为“对象的模板”。我们需要通过这个模板,创建类的实例对象,然后才能使用类定义的功能。
创建对象需要定义构造函数__init__()方法。构造方法用于执行“实例对象的初始化工作”,即对象创建后,初始化当前对象的相关属性,无返回值。

  • 名称固定,必须是:init()
  • 第一个参数固定,必须是:self。self指的是刚刚创建好的实例对象
  • 构造函数通常用来初始化实例对象的实例属性。
  • 通过”类名(参数列表)“来调用构造函数。调用后,将创建好的对象返回给相应的变量/
  • 初始化创建好的对象,初始化值指的是:“给实例属性赋值”

实例属性

实例属性是从属于实例对象的属性,也称为“实例变量”。

  1. 实例属性一般在__init__()方法中定义:
    self.实例属性名 = 初始值
  2. 在本类的其他实例方法中,也是通过self进行访问
    self.实例属性名
  3. 创建实例对象后,通过实例随行访问:
    obj01 = 类名()
    obj01.实例属性名 = 值

实例方法

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

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

方法的调用格式:

对象.方法名([实参列表])
  • 定义实例方法时,第一个参数必须是self,self指的是当前的实例对象
  • 调用实例方法时,不需要也不能给self传参。self由解释器自动传参。

其他操作

dir(obj) 可以获得对象的所有的属性和方法
obj.__dict__:对象的属性字典
pass 空语句
isinstance(对象, 类型):判断“对象”是不是“指定类型”

类方法

@classmethod
def 类方法名(cls, [形参列表])
	函数体

@classmethod必须位于方法上面一行
第一个cls必须有,指的是“类对象本身”
调用类方法:“类名.类方法名(参数列表)”,参数列表不需要也不能给cls传参数
类方法中访问实例属性和实例方法会导致报错
字类方法继承父类方法时,传入cls是子类对象而非父类对象

静态方法

静态方法和模块中定义普通函数没有区别,只不过“静态方法"放到了类的名字空间里面,需要通过类调用

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

@staticmethod必须位于方法上面一行
调用静态方法:“类名.静态方法名(参数列表)”
静态方法中访问实例属性和实例方法会导致报错

析构方法__del __和垃圾回收机制

__del __方法称为析构方法,用于实现对象被销毁时所需的操作。比如:释放对象占用的资源,例如:打开的文件资源、网络连接等

python实现自动的垃圾回收,当对象没有被引用时(引用次数为0),由垃圾回收器调用__del__方法。我们可以通过删除对象,从而保证调用__del __方法。系统会自动提供__del __方法,一般不需要自定义析构方法。

class Person:
	def __del__(self):
		print("销毁对象:{0}".format(self))

p1 = Person()
p2 = Person()
del p2
print("程序结束")

_ _cal _ _ 方法和可调用对象

定义了 _ _cal _ _ 方法的对象,称为可调用对象,即对象可以像函数一样被调用。

class SalaryAccount:
	'''工资计算类'''
	def __cal__(self, *args, **kwargs ):
		print("算工资")
		return 3000

s = SalaryAccount()
s()
----------------------算工资
class SalaryAccount:
	'''工资计算类'''
	def __cal__(self, salary ):
		print("算工资")
		yearSalary = salary * 12
		daySalary = salary // 22.5
		hourSalary = daySalary // 8

		return dict(yearSalary=yearSalary, monthSalary=salary, daySalary=daySalary, hourSalary=hourSalary)

s = SalaryAccount()
print(s(3000))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要获取ERA5数据,您可以使用ECMWF的API。具体步骤如下: 1. 首先,需要注册一个ECMWF账户并获取API密钥,具体步骤可以参考官方文档 https://confluence.ecmwf.int/display/WEBAPI/Access+ECMWF+Public+Datasets 2. 安装ecmwfapi库。可以使用pip命令进行安装: ``` pip install ecmwfapi ``` 3. 编写Python脚本。以下是一个示例脚本,可以获取2022年11月12至2023年2月28的ERA5数据,并下载到本地。 ```python from ecmwfapi import ECMWFDataServer server = ECMWFDataServer() # 定义要下载的变量和层次 era_variables = "2t,sp" era_levels = "2m,10m" # 定义下载参数 era_params = { "dataset": "era5", "date": "2022-11-12/to/2023-02-28", "expver": "1", "grid": "0.25/0.25", "levtype": "sfc", "param": era_variables, "step": "0", "stream": "oper", "time": "00:00:00/06:00:00/12:00:00/18:00:00", "type": "an", "class": "ea", "format": "netcdf", "target": "era_data.nc", } # 进行下载 server.retrieve(era_params) ``` 在上面的示例中,我们定义了要下载的变量是2m和10m的温度(2t)和气压(sp),下载的层次是表面层(sfc),时间分辨率为每天四个时刻,下载的数据格式为NetCDF,下载的文件保存为era_data.nc。 您可以根据需要修改下载参数。具体可用参数可以参考ECMWF API文档 https://confluence.ecmwf.int/display/CKB/ERA5+data+documentation 注意:上述代码中的"target"参数指定了下载数据保存的文件名和路径。请根据自己的需求修改此参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值