栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python源码学习(四)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python源码学习(四)

面向对象

面向对象最重要的就是类和实例。
Python中通过class关键字定义类,使用类名加括号创建实例。前后下划线的init函数可以在创建实例时做一些初始化工作。在类中定义函数时,第一参数永远是实例变量self,调用时候不用传递。

calss A(object):
	pass
	
b = A()

在这个示例中有三个对象,object和A都是class对象,b是实例对象。这里面存在两种关系。Object和A是 is-kind-of 关系,基类和子类之间的关系,A和b是 is-instance-of 关系,类和示例的关系。
Python中有两种对象,类对象和实例对象。实例b的type对象就是A,那A这个class对象的type就是metaclass对象,在python内部,对应的就是PyType_Type。Metaclass记录了class对象的一部分元信息,包括class对象的type,应该如何创建,分配多少内存等。这部分元信息被称为静态元信息。相应的动态元信息就是class对象的属性表,包含了class的属性和方法。这部分前面也说过。通过调用metaclass对象可以创建class对象,而调用class对象会得到实例对象。

Python中类和实例可以随时增加属性和方法。类增加的属性,实例可以即时访问;实例增加的属性,类不可以访问。

class MyClass:
	def method(self):
		return "instance method called",self

	@classmethod
	def classmethod(cls):
		return "class method called",cls
	
	@staticmethod
	def staticmethod():
		return "static method called"

第一个就是普通的实例方法,需要一个self参数指向一个实例。
第二个使用classmethod装饰器的是类方法,不接受self参数,接受一个class参数用来指向类。
第三个用staticmethod装饰的是静态方法,不接受self和class参数。它属于某个命名空间。
实例只能调用实例方法和静态方法,无法调用类方法。使用类名可以调用类方法和静态方法。
可以使用类方法实现类的不同构造函数;静态方法作用和普通函数类似,但属于类的命名空间。

下划线

在python中,定义属性时,下划线有着特殊含义。总共有五种下划线模式和命名约定。
– 前置单下划线:约定的私有变量,不是公共接口,尽量不要访问。而且使用通配符*调入模块时,python不会导入带有前置单下划线的名称。除非定义了__all__列表
– 后置单下划线:可以在保留字后加单下划线来绕过命名冲突
– 前置双下划线:python解释器遇到前置双下划线会进行名称改写,来避免子类命名冲突,一般是加上类名的改写。所以类和实例对象无法直接访问
– 前后双下划线:前后双下划线命名不会被python解释器进行名称改写,可以被类和对象调用
– 单下划线:用来表示临时的无关的变量,比如for循环中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/859162.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号