14 python面向对象类
1 -----------1, 类的定义,创建实例,类属性---------------------------------------- 2 3 class person(object):## 默认继承了object基类,这是所有类的基类 4 """docstring for person.""" 5 6 def __init__(self, arg1,arg2): ## 构造方法定义(实例化时自动调用) 7 self.pid=arg1 ## 这是类的实例属性(而不是类的属性) 8 self.name=arg2 9 myname=arg2 ### 这个叫做局部变量(前面没有加self. 也没有声明globle),只能在本方法内部使用,(类中的其它方法都是没法使用的) 10 11 name1="huang" ## 类属性定义(只能通过类名访问) 12 13 def __del__(self): ## 析构函数(对象释放时自动调用) 14 print "类析构" 15 16 def run(self): 17 print "我是普通方法" 18 19 p=person(1,'jim') ##类实例化 20 print (p.pid,p.name,p.name1) ## 实例属性只能通过实例来访问 21 print person.name1 # 类属性可以通过类名来访问 22 p.run() 23 24 25 26 27 -----------1, 类的构造方法---------------------------------------- 28 29 1.使用一个名为__init__的方法来完成初始化。 30 2.使用一个名为__del__的方法来完成类似析构操作。 31 3.所有的实例方法都拥有一个self参数来传递当前实例,类似于this。 32 4.可以使用__class__来访问类型成员 33 5,python不支持构造方法重载,也不支持普通方法重载。(重载即是方法名一样,而参数不一样,调用方法时,会跟据参数类型,自动识别调用哪一个方法) 34 35 __init__() 36 #构造函数,如果不自定义,python会自动给出一个默认的 37 38 __del__() 39 ##析构函数,也是可选的,如果不自定义,python也会自动给出一个默认的 40 41 del (对象名): 42 ##显示的调用析构函数 43 44 45 46 47 ### !!! 类中函数和普通的函数相比: 48 在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。 49 除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。 50 51 52 -----------1, 类的方法 的调用---------------------------------------- 53 54 2,python类的方法的调用 55 56 #1.类的内部调用: 57 self.<方法名>(参数列表)。 58 #2.在类的外部调用: 59 <实例名>.<方法名>(参数列表)。 60 61 62 3,类看方法和属性的调用。 63 例如: 64 class Test: 65 first =123 ## 类属性 66 __second=456 ## 私有属性:前面加__变量名 例;__money (__也算是变量名的一部分,并不是标识符) 67 ##只能在类内部访问(当然可以通过接口函数进行访问修改) 68 def func (self): 69 self.name='jim' ## 实例属性 70 return "test_class" 71 则: 72 mile=Test() --实例化对象,返回类的对象(即对象的句柄,也即是对象的名字) 73 mile.func() ---对象调用类中的方法 74 mile.first ---对象访问类中的属性 75 Test.first ---类名访问类中的属性 76 77 mile.__second ---在类的外部使用对象不可以访问类的私有属性 XXXXX! 78 Test.__second ---在类的外部使用类名不可以访问类的私有属性 XXXXX! 79 80 81 ###############实例方法, 类方法,静态方法################################ 82 83 实例方法:只能通过类的实例化对象访问 ## 用的多 84 类方法: | 85 ----》 二者在使用上没有区别,都是只能使用类直接访问 ## 用的较少,但是静态方法不能有self,(类方法是和普通类一样要有self的) 86 静态方法:| 87 88 89 90 91 92 1,类中的实例方法(即实例方法) 93 class CLA(): 94 def fun1 (self): ##必须要有self 95 print ("thhis is XXXX !!") 96 97 a=CLA() 98 a.fun1() ##只能使用对象来访问 99 100 2,类中的静态方法 101 102 class person(object):## 默认继承了object基类,这是所有类的基类 103 """docstring for person.""" 104 def __init__(self, arg1,arg2): ## 构造方法定义(实例化时自动调用) 105 self.pid=arg1 ## 这是类的实例属性(而不是类的属性) 106 self.name=arg2 107 name1="huang" ## 类属性定义(只能通过类名访问) 108 def __del__(self): ## 析构函数(对象释放时自动调用) 109 print "类析构" 110 111 def run(self): 112 print "我是普通方法" 113 114 @staticmethod ## 加此标识 ,则成了静态方法(静态方法不能有self) 115 def func(): ## 静态方法不能有self, 116 print "我是静态方法" 117 118 @classmethod ## 加此标识成了类方法(类方法是要有self的) 119 def func2 (self): 120 print "我是类方法" 121 122 123 p=person(1,'jim') ##类实例化 124 print (p.pid,p.name,p.name1) ## 实例属性只能通过实例来访问 125 print person.name1 # 类属性可以通过类名来访问 126 p.run() ## 通过实例访问。实例方法 127 p.func() ## 可通过实例访问静态方法 128 person.func() ## 可通过类名访问静态方法 129 130 3,类方法 131 class cla: 132 def func (self): 133 print ("xxxxx") 134 mr=classmethod(func) ##生成新的类方法 135 136 cla.mr() ##可以直接使用类名来访问 137 说明: 138 classmethod() 函数的参数只参是类中的普通方法,否则会语法错误 139 --- 140 class cla: 141 @classmethod ##使用装饰器 142 def func (self): 143 print ("xxxxx") 144 cla.func() ##也是可以变成类方法的,直接被类来调用 145 146 147 148 149 150 151 152 ############ 内部类 极少用 #################### 153 class Milo(): 154 class Test(): 155 def fun2 (self): 156 print ("this is in !!!") 157 name="cvst" 158 def fun1 (self): 159 print ("thhis is out !!") 160 161 a=Milo() 162 a.fun1() 163 b=a.Test() 164 b.fun2() 165 -------- 166 a=Milo().Test() 167 a.fun2() 168 ------- 169 a=Milo.Test() 170 a.fun2() 171 ###以上三种方式使用内部类都是可以的 !!!类的实例化必须有括号()