欢迎来到天天文库
浏览记录
ID:43485732
大小:400.25 KB
页数:11页
时间:2019-10-08
《Python类详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、定义Python的Class比较特别,和我们习惯的静态语言类型定义有很大区别。1.使用一个名为__init__的方法来完成初始化。2.使用一个名为__del__的方法来完成类似析购操作。3.所有的实例方法都拥有一个self参数来传递当前实例,类似于this。4.可以使用__class__来访问类型成员>>>>>>classMyClass:def__init__(self):print"initialize."defFoo(self):printid(self)>>>>>>a=MyClass()in
2、itialize.>>>>>>a.Foo()14412576>>>>>>id(a)14412576Class有一些特殊的属性,便于我们获得一些额外的信息。>>>>>>classMyClass(object):"""ThisisMyClass'sDocoment"""def__init__(self):self.i=1234>>>>>>MyClass.__doc__#类型帮助信息"ThisisMyClass'sDocoment""ThisisMyClass'sDocoment">>>>>>MyCla
3、ss.__name__#类型名称'MyClass'>>>>>>MyClass.__module__#类型所在模块'__main__'>>>>>>MyClass.__bases__#类型所继承的基类(Python支持多继承)(,)>>>>>>MyClass.__dict__#类型字典,存储所有类型成员信息>>>>>>#以下是实例拥有的属性>>>>>>MyClass().__class__#实例的类型4、_main__.MyClass'>>>>>>>MyClass().__module__#实例类型所在模块'__main__'>>>>>>MyClass().__dict__#对象字典,存储所有实例成员信息{'i':1234}>>>>>>继承Python支持多继承,但有几点需要注意:1.基类__init__/__del__需显示调用。2.继承方法的调用和基类声明顺序有关。>>>>>>classBase1:def__init__(self):print"Base1"deftest(self):prin5、t"Base1test">>>>>>classBase2:def__init__(self):print"Base2"deftest(self):print"Base2test">>>>>>classMyClass(Base2,Base1):def__init__(self):Base1.__init__(self)Base2.__init__(self)print"MyClass">>>>>>a=MyClass()Base1Base2MyClass>>>>>>a.test()Base2test>6、>>>>>#下面把Base1放在前面>>>>>>classMyClass(Base1,Base2):def__init__(self):Base1.__init__(self)Base2.__init__(self)print"MyClass">>>>>>a=MyClass()Base1Base2MyClass>>>>>>a.test()Base1test>>>>>>成员PythonClass同样包含类型和实例两种成员。>>>>>>classClass1:i=123#类成员def__init__(7、self):self.i=100#实例成员>>>>>>printClass1.i123>>>>>>printClass1().i100>>>>>>有几个很"特殊"的"规则"需要注意。(1)我们可以通过实例引用访问类型成员。因此下面的例子中self.i实际指向Class1.i,直到我们为实例新增了一个成员i。>>>>>>classClass1:i=123def__init__(self):printself.iprinthex(id(self.i))>>>>>>hex(id(Class1.i))#显8、示Class1.i的地址'0xab5860'>>>>>>a=Class1()#创建Class1实例,我们会发现self.i实际指向Class1.i1230xab5860>>>>>>Class1.__dict__#显示Class1成员{'i':123,'__module__':'__main__','__doc__':None,'__init__':}>>>>>>a.__dict__#显示实例成员{}>>>>>>a.i=10
4、_main__.MyClass'>>>>>>>MyClass().__module__#实例类型所在模块'__main__'>>>>>>MyClass().__dict__#对象字典,存储所有实例成员信息{'i':1234}>>>>>>继承Python支持多继承,但有几点需要注意:1.基类__init__/__del__需显示调用。2.继承方法的调用和基类声明顺序有关。>>>>>>classBase1:def__init__(self):print"Base1"deftest(self):prin
5、t"Base1test">>>>>>classBase2:def__init__(self):print"Base2"deftest(self):print"Base2test">>>>>>classMyClass(Base2,Base1):def__init__(self):Base1.__init__(self)Base2.__init__(self)print"MyClass">>>>>>a=MyClass()Base1Base2MyClass>>>>>>a.test()Base2test>
6、>>>>>#下面把Base1放在前面>>>>>>classMyClass(Base1,Base2):def__init__(self):Base1.__init__(self)Base2.__init__(self)print"MyClass">>>>>>a=MyClass()Base1Base2MyClass>>>>>>a.test()Base1test>>>>>>成员PythonClass同样包含类型和实例两种成员。>>>>>>classClass1:i=123#类成员def__init__(
7、self):self.i=100#实例成员>>>>>>printClass1.i123>>>>>>printClass1().i100>>>>>>有几个很"特殊"的"规则"需要注意。(1)我们可以通过实例引用访问类型成员。因此下面的例子中self.i实际指向Class1.i,直到我们为实例新增了一个成员i。>>>>>>classClass1:i=123def__init__(self):printself.iprinthex(id(self.i))>>>>>>hex(id(Class1.i))#显
8、示Class1.i的地址'0xab5860'>>>>>>a=Class1()#创建Class1实例,我们会发现self.i实际指向Class1.i1230xab5860>>>>>>Class1.__dict__#显示Class1成员{'i':123,'__module__':'__main__','__doc__':None,'__init__':}>>>>>>a.__dict__#显示实例成员{}>>>>>>a.i=10
此文档下载收益归作者所有