zoukankan      html  css  js  c++  java
  • 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 ###以上三种方式使用内部类都是可以的 !!!类的实例化必须有括号()
  • 相关阅读:
    Git库搭建好之后,当要提交一个新的文件,需要做的是3个步骤
    实习生面试经历
    Word2007中插入公式之后,公式上下有很大的空白
    参考文献规范格式
    Git学习笔记四--远程仓库
    Git学习笔记三--管理修改、撤销修改、删除文件
    Git学习笔记二--工作区和暂存区
    Git学习笔记一--创建版本库、添加文件、提交文件等
    Errors running builder 'DeploymentBuilder' on project '工程名'
    java中运算符与表达式
  • 原文地址:https://www.cnblogs.com/2mei/p/9254168.html
Copyright © 2011-2022 走看看