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循环中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值