5-1 面向对象基础及Python 类常考问题

本文探讨了面向对象编程的概念,介绍了如何在Python中创建类,强调了组合优于继承的原则,并详细阐述了类变量与实例变量的区别。同时,文章解释了Python的元类及其应用场景,帮助读者理解元类在框架构建中的作用。最后,总结了面向对象编程中的核心知识点,包括类、组合、继承、类变量和实例变量以及元类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是面向对象编程?

Object Oriented Programming(OOP)
1.把对象作为基本单元,把对象抽象成类(Class),包含成员和方法
2.数据封装、继承、多态
3.Python中使用类来实现。过程式编程(函数),OOP(类)

二、python中如何创建类?
def Person(object):   # py3 直接 class Person
	def __init__(self, name, age):
		self.name = name
		self.age = age

	def print_name(self):
		print('my name is {}'.format(self.name))
三、组合与继承

优先使用组合而非继承
1.组合是使用其他的类实例作为自己的一个属性(Has-a关系)
2.子类继承父类的属性和方法(Is a 关系)
3.优先使用组合保持代码简单

之前实现stack/queue就使用到了组合

四、类变量和实例变量的区别

区分类变量和实例变量
1.类变量是由所有实例共享
2.实例变量由实例变量单独享有,不同实例之间不影响
3.当我们需要在一个类的不同实例之间共享变量的时候使用类变量

五、classmethod/staticmethod区别

1.都可以通过 class.method()的方式使用
2.classmethod第一个参数是cls,可以引用类变量
3.staticmethod使用起来和普通函数一样,只不过放在类里去组织
4.classmethod是为了使用类变量,staticmethod是代码组织的需要,完全可以放到类之外

六、什么是元类?使用场景

元类(Meta Class)是创建类的类
1.元类允许我们控制类的生成 ,比如修改类的属性等
2.使用 type来定义元类
3.元类最常见的一个使用场景就是ORM框架

class Base:
	pass

class Child(Base):
	pass

# 等价定义, 注意 Base 后要加上逗号 ,否则就不是 tuple 了
SameChild = type('Child', (Base,), {})


# 加上方法
class ChildWithMethod(Base):
	bar = True

	def hello(self):
		print('hello')
	
def hello(self):
	print('hello')

# 等价定义
ChildWithMethod = type(
	'ChidlWithMethod', (Base, ), {'bar': True, 'hello': hello}  # 这里的 hello 是外面的定义函数
)


# 元类继承自 type
class LowercaseMeta(type):
	""" 修改类的属性名称为小定的元类 """
	def __new__(mcs, name, bases, attrs):
		lower_attrs = {}
		for k, v in attrs.items():
			if not k.startswith('__'):   # 排除 magic method
				lower_attrs[k.lower()] = v
			else:
				lower_attrs[k] = v
		return type.__new__(mcs, name, bases, lower_attrs)

class LowercaseClass(metaclass=LowercaseMeta):  # py3
	BAR = True

	def HELLO(self):
		print('hello')

print(dir(LowercaseClass))   # 你会发现 "BAR" 和 “HELLO"都变成了小写

# 用一个类的实例调用 hello 方法,我们修改了类定义时候的属性名
LowercaseClass().hello()

说明:
__new__生成实例,__init__初始化

七、总结

面向对象与 python类常考题
1.什么是面向对象编程,python如何使用类
2.组合 vs 继承;类变量 vs 实例变量;classmethod vs staticmethod
3.元类的创建和使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值