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 ###以上三种方式使用内部类都是可以的 !!!类的实例化必须有括号()

 

posted @ 2018-07-02 15:47  虫儿要吃草  阅读(136)  评论(0编辑  收藏  举报