【聪明办法学Python】学习笔记三 python面向对象编程

面向对象编程理论

  • 将面向过程编程中的函数和变量替换为类和对象及类和对象中的属性和方法
  • python中一切事物都可以看作一个对象,它有一个独特的名字区别于其他对象,有属性描述它的特征,定义了一组操作来决定对象的行为
  • 类是一组具有相同数据和操作的对象的模板集合
  • 面向对象编程的特点
    • 抽象:归纳、集中事物特征的过程
    • 封装:将数据和操作集中在对象内部,隐藏对象内部细节
    • 继承:一个类继承另一个类之后,可以使用另一个类的特征和功能并添加自己的特征
    • 多态:不同对象进行相同操作时产生不同的行为

Python面向对象编程

Python类与对象

  • 使用class关键字定义一个类
  • 使用类的名字和一对括号创建类的对象
# 创建一个类
class student():
	pass

# 创建student类的对象
xiaohu = student()
print(type(xiaohu))

类与对象中的变量

class student():
	name = 'Undefined'
	Math_score = None
	Chinese_score = None


xiaohu = student()
print(xiaohu.name)
xiaohu.name = 'XiaoHu'
print(xiaohu.name)
student.name = 'Change Name'
print(xiaohu.name)
xiaoming = student()
print(xiaoming.name)

image.png
区分类变量与对象变量:
在python中对象拥有与类相同的数据和操作,对象变量属于对象,更改对象变量只影响该对象的属性,类变量属于类,更改类变量会影响所有后续由该类创建对象的属性。
如以上代码所示:更改类变量后,已经创建的对象变量不会受到影响,但这之后新创建的对象变量的值都会改变

类与对象中的函数

类中定义的函数被称为方法,必须有一个额外的self参数用于在类的内部指向对象本身
给student类添加一个更改成绩的方法

class student():
	def change_score(self, course_name, score):
		if course_name == 'Math':
			self.Math_score = score
		elif course_name == 'Chinese':
			self.Chinese_score = score
		else:
			print(course_name, " course is still not in current system")

	def print_name(self, ):
		print(self.name)
		
	name = 'Undefined'
	Math_score = None
	Chinese_score = None

__init__方法

python类中专门用于初始化对象的方法,在类创建对象时被自动调用
__init__方法重构student类

class student():
	def __init__(self, name, Math_score, Chinese_score):
		self.name = name
		self.Math_score = Math_score
		self.Chinese_score = Chinese_score

xiaohu = student('XiaoHu', 65, 70)

python中万物皆对象

  1. 变量:如一个int型变量有bit_length()to_byte()from_byte()等方法
  2. 常量:字符串常用方法如format()构造特定形式字符串、replace()替代字符串中某个字符或子串、split()通过某种字符分隔字符串、upper()大写字符串、lower()小写字符串
  3. 函数:.__name__获得函数名字
  4. 数据结构:列表、集合、字典都有很多方法
  5. 程序:.__name__得到程序名
  • 列表

    • append(x) 把元素 x 放在入列表尾部
    • count(x) 统计元素 x 在列表中出现次数
    • extend(seq) 把新列表 seq 合并到列表尾部
    • index(x) 返回元素 x 在列表第一次出现的位置
    • insert(index, x) 把元素 x 插入到 index 位置
    • pop(index) 删除并返回 index 所在位置的元素
    • remove(x) 删除出现的第一个 x 元素
    • reverse() 颠倒列表顺序
    • sort() 对列表进行排序
  • 字典

    • clear() 清除字典内所有元素
    • copy() 返回字典的一个复制
    • has_key(key) 检查 key 是否在字典中
    • items() 返回一个含由 (key, value) 格式元组构成的列表
    • keys() 返回由键构成列表
    • values() 返回由值构成的列表
    • setdefault(key, default) 为键 key 添加默认值 default
    • pop(key) 删除 key 并返回对应的值
  • 集合

    • add(x) 向集合中添加元素 x
    • clear() 清空集合
    • copy() 返回集合的一个复制
    • difference(set) 返回集合与另一个集合的差集
    • discard(x) 删除元素 x
    • isdisjoint(set) 判断两个集合是否有交集
    • issubset(set) 判断新集合 set 是否是集合的子集
    • issuperset() 判断新集合 set 是否是集合的超集

练习

重构学生管理系统

class student():
	def __init__(self, name, Math_score, Chinese_score):
		self.name = name
		self.Math_score = Math_score
		self.Chinese_score = Chinese_score
	def __repr__(self,):
		return str((self.name, self.Math_score, self.Chinese_score))
	def change_score(self, course_name, score):
		if course_name == 'Math':
			self.Math_score = score
		elif course_name == 'Chinese':
			self.Chinese_score = score
		else:
			print(course_name, " course is still not in current system")

	def print_name(self, ):
		print(self.name)
		
	name = 'Undefined'
	Math_score = None
	Chinese_score = None
# 用字典+student类来实现
ab = {}
ab.setdefault('XiaoHu', student('XiaoHu', 65, 55))
ab.setdefault('XiaoMing', student('XiaoMing', 80, 92))
ab.setdefault('XiaoWei', student('XiaoHu', 95, 98))
print(ab)

ab['XiaoHu'].change_score('Math', 97)
ab['XiaoMing'].change_score('Math', 75)
ab['XiaoWei'].change_score('Math', 92)

ab['XiaoHu'].change_score('Chinese', 85)
ab['XiaoMing'].change_score('Chinese', 71)
ab['XiaoWei'].change_score('Chinese', 93)
print(ab)

ab.pop('XiaoMing')
print(ab)

ab.setdefault('Cryin', student('Cryin', 87, 88))
print(ab)

dict.setdefault(key, default_value)函数,用于字典中键值对默认值的设定,若key存在于字典中,返回对应的值;若key不存在,则向字典中插入对应键值对,并返回默认值

学习资料

  1. datawhale发布的learn-python-the-smart-way:https://github.com/datawhalechina/learn-python-the-smart-way
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值