Notes on Python Basics -“Class“-Day 7

Day - 7

Author: Denny YU
Created

嵌套函数,内部函数

nonlocal关键字global关键字

在函数内部声明变量属于global还是nonlocal

LEGB规则

LEGB规则:python查找“名称”时

1. Local函数或者类方法的内部
2. enclosed嵌套函数(一个函数包裹另一个函数,闭包)
3. Global模块中的全局变量
4. Built inPython自己保留的特殊名称

面向对象和面向过程

面向过程(Procedured Oriented)思维

  • 关注程序运行逻辑流程

面向对象(Object Oriented)

  • 关注对象之间的关系

类的定义

1. 构造函数__init__()

si=Student()

实际上调用了两个方法

__init()__:初始化对象,给实例属性赋值**

__new__():创建对象,一般无需定义这种方法

一个python对象包含:

  1. id
  2. 类型
  3. value
    1. 属性
    2. 方法

2. 实例属性

  1. 一般在、__init__() 方法中来实现
  2. 在本类的其他实例方法中,也通过self进行访问
  3. 创建实例对象狗,通过实例对象访问

3. 实例方法

实例方法发从属于实例对象的方法,实例方法的定义格式如下

def function(self,[形参列表]):
	函数体
  1. 定义实例方法时,第一个参数必须为self,和面前一样,self指当前的实例对象
  2. 调用实例方法时,不需要也不能给self传参,函数不重要

4. 实例对象的方法调用本质

a=student()

a.say_score() → \rightarrow 调用 → \rightarrow Student.say_score(a)

其他的一些操作:

  1. dir(obj)可以获得对象的所有属性和方法
  2. obj.__dict__对象的属性字典
  3. pass空语句
  4. isinstance(对象,类型)判断

类属性和类方法

类属性是在初始化

在这里插入图片描述

1. 类对象

当解释器执行class语句时,就会创建一个类对象

class Student:
	paa #空语句
print(type(Student))
print(id(Student))

Stu2 = Student
s1 = Stu2()
print(s1)

2. 类方法

类方法是从属于“类对象”的方法。类方法通过装饰器@classmethod来定义,格式如下

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

要点如下:

  1. @classmethod 必须位于方法上面一行
  2. 第一个cls必须有;cls值得就是“类对象”本身;
  3. 调用类方法格式:“类名.类方法名(参数列表)”。参数列表中,不需要也不能给cls传值
  4. 类方法中访问实例属性和实例方法会导致错误
  5. 子类继承父类方法,传入cls是子类的对象,而非父类的对象

3. 静态方法

Python中允许定义与“类对象”无关的方法,成为静态方法

要点如下:

  1. @staticmethod 必须位于方法上面一行
  2. 调用静态方法格式:“类名.静态方法名(参数列表)”。
  3. 静态方法中访问实例属性和实例方法会导致错误
class Student:
	company = 'SXT'
	def __init__(self,name,score):
		self.name = name  
		self.score = score
	def print_score(self):
		print(self.score)	
	@staticmethod
	def add(a,b):
		print("{0}+{1}={2}".format(a,b,(a+b)))
	@classmethod
	def printCompany(cls):
		print(cls.company)

Student.printCompany()
c1 = Student('Jing',80)
c1.printCompany()
c1.print_score()
c1.add(1,2)

4. __del__方法(析构函数)和垃圾回收机制

__del__ 方法称为“析构方法”,用于实现对象被销毁时所需的操作,比如:释放对象占用的资源

5. __call__方法和可调用对象

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

class SalaryAcount:
	'''
	工资计算类
	'''
	def __call__(self,salary):
		print("算工资啦...")
		yearsalary = salary*12
		daysalary = salary//22.5 ##国家规定的每个月的平均工作天书
		hourssalary = daysalary//8  

		return dict(yearsalary=yearsalary,daysalary=daysalary,hourssalary=hourssalary)

s=SalaryAcount()
print(s(30000))
##########################输出
算工资啦...
{'yearsalary': 360000, 'daysalary': 1333.0, 'hourssalary': 166.0}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值