zoukankan      html  css  js  c++  java
  • Python之面向对象类和对象

    Python之面向对象类和对象

      定义一个类:class

      定义类的语法:

    class Test(object):
        """
        类里定义一类事物共同的技能。
        可以是变量,也可是函数。
        """
        camp = "Demacia"
        def attack(self):
            print("attack")

      如何使用类:类的用法----实例化和引用自己的属性

        一、内置类

            例如int() 加参数就能用。

            x=int(10)

            print(x)

        二、实例化

           定义的Test类,加括号。就是将Test类 变成一个具体的对象 Test()。

           所以,obj = Test()是将一个抽象的类Test,变成一个具体的对象的过程。这个过程就叫实例化。

        三、引用类的方法,类的特征(类的变量),类的技能(类的函数)

          print(Test.camp) 引用Test类里camp变量的值。demacia

          Test.attack(5578)    

    #一:实例化
    # x=int(10)
    # print(x)
    
    # obj=Garen() #实例化
    # print(obj)
    
    #二:引用类的特征(类的变量)和技能(类的函数)
    # print(Garen.camp)
    # print(Garen.attack)
    # Garen.attack(1231231) 

      如何使用实例:

      g1 = Test() 这样就是一个实例。将Test类实例了。对于g1来说,就是一个具体的存在对象。

                                                                                        
    #如何使用实例                                                                            
    class Test:                                                                        
        camp='Demacia'                                                                 
                                                                                       
        def __init__(self,nickname):                                                   
            """                                                                        
            init的作用:self.nick是给自己定义了一个别名,叫nickname                                     
            实例化Test(),就会自动触发__init__方法的执行。                                             
            :param nickname:                                                           
            """                                                                        
            self.nick=nickname  #g1.nick='草丛伦'                                         
        def attack(self,enemy):                                                        
            # print('---------->',self.nick) #g1.nick                                  
            print('%s attack %s' %(self.nick,enemy))                                   
                                                                                       
                                                                                       
    g1=Test('草丛伦') #Test.__init___(g1,'草丛伦')                                           
    g2=Test('猥琐轮')                                                                     
    print(g1.nick)                                                                     
    g1.attack('George')                                                                
                                                                                       
                                                                                       
    print(g1.nick)                                                                     
    print(g1.camp)                                                                     
    print(g1.attack)                                                                   
    print(Test.attack)                                                                 
                                                                                       
                                                                                       
    Test.attack() #调用的是函数,                                                             
    g1.attack() #self=g1     g1.attack是一种以绑定方法,调用attack的方式                              
    Test.attack(g1)                                                                    
                                                                                       
                                                                                                                                                                                                                                                      
    # print(g2.nick)                                                                   
    # print(g2.camp)                                                                   
                                                                                       

         Test.attack() 和g1.attack() 的区别:

             Test.attack()是调用的attack的函数。由类去调用就没有对象那种自动传值的功能

             g1.attack() 是g1绑定attack函数这个方法,会将g1自己作为第一个参数,传给后面的方法 (自动传值)。

      self的作用:

        由对象触发的,就有自动传值的功能。

        self就是对象自己。 

        

    #总结:
    #类:一:实例化,二:引用名字(类名.变量名,类名.函数名)
    #实例:引用名字(实例名.类的变量,实例名.绑定方法,实例名.实例自己的变量名)
    
    class Garen:
        camp='Demacia'
    
        def __init__(self,nickname):
            self.nick=nickname  #g1.nick='草丛伦'
        def attack(self,enemy):
            # print('---------->',self.nick) #g1.nick
            print('%s attack %s' %(self.nick,enemy))
    
    # print(Garen.camp) #查
    # Garen.camp='aaaaaa' #改
    # print(Garen.camp)
    #
    # # del Garen.camp #删除
    # # print(Garen.camp)
    #
    # Garen.x=1
    # print(Garen.x)
    
    
    g1=Garen('George')
    # print(g1.nick)
    # g1.nick='asb'
    # print(g1.nick)
    # del g1.nick
    # print(g1.nick)
    
    # g1.sex='female'
    # print(g1.sex)

       面向对象的程序设计OOD

         找对象 ----》找类(归纳对象共同的特征与技能,还有每个对象独有的特征)

       面向对象编程OOP

         先定义类 ---》实例化出对象

       面向对象分析OOA

       面向对象测试OOT

       面向对象维护OOSM

       定义学生类:
        特征:共同国籍(China)
        技能:查看成绩
    
      独有的特征:ID,名字,性别,省。
    # #OOD
    # #定义学生类:
    # #特征:共同国籍(China)
    # #技能:查看成绩
    # #独有的特征:ID,名字,性别,省。
    
    # #OOP
    class Student():
        country = "China"
        def __init__(self,ID,NAME,SEX,PROVINCE):
            self.id = ID
            self.name = NAME
            self.sex = SEX
            self.province = PROVINCE
    
        def search_score(self):
            """
            查询分数技能
            :return:
            """
            print("tell score")
        def study(self):
            """
            学习技能
            :return:
            """
            print('study')
    
    ##类的用法:
    ##类的实例化,属性引用
    s1 = Student("333",'george','man','neimeng')
    s2 = Student("444",'wang','man','neimeng')
    
    ##类的属性: 特征(变量)和技能(函数,绑定方法)
    s1.search_score()
    s2.search_score()
    s1.study()
    print(Student.country)
    print(Student.__init__)
    print(Student.study)
    
    Student.__init__(s1,2,3,4,5)    #这样是调函数
    
    Student.study(s1)   #类查看自己的属性。
    
    Student.x =1 #给类增加一个属性。

       什么是对象,什么是类:

         在一个游戏中,每个玩家选一个英雄,每个英雄都有自己的特征和技能,特征既是数据属性,技能既是方法属性。特征与技能的结合就是一个对象。

         从一组对象中提取相似的部分就是类,类所有对象都具有的特征和技能的结合体。

       在Python中,用变量表示特征,用函数表示技能,因而类是变量与函数的结合体,对象是变量与方法(指向类的函数)的结合体。

       在Python3中,统一了类与类型的概念。类型和类就是一个。class。

    在Python2中,分为新式类和经典类。在Python3中,都是统一的新式类。

      新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类。

      所有类不管是不是显示声明父类,都有一个默认继承的object父类。父类也叫基类,基础的意思。

      可用 类名.__bases__ 来查看类都继承了那些父类。

      在Python2中的类的区别:

      经典类:

      class 类名:

        pass

      新式类:

      class 类名(父类):

        pass

       

     在类的 __init__ 函数里不能有return的返回值。  在元类里详细说明。

    对象的使用:

       对象也成为实例,

    class Test(object):
        pass
    
    T = Test()    #对象T就是类Test的实例。

      对象的用法: 

        只有属性引用。

      对象的属性:

        对象本身就只有特征(变量)

    class Test(object):
        def __init__(self,id,name):
            self.id = id
            self.name = name
    
        def A(self):
            pass
    
    T = Test()
    print(T.id,T.name)   #对象可以引用类的变量。  

     查看类的名称空间和对象的名称空间:

      类的名称空间:

        类名.__dict__     

      对象的名称空间:

        对象.__dict__

      在 Test.A 和 T.A 是不一样的内存地址。

      绑定方法的核心在于“绑定”,唯一绑定一个确定的对象。 

    基于面向对象开发:

    #应用场景
    #找不到共同特征和技能不用强求
    
    #对象:学校----->归类
        #共有的特征:商标为etiantian
        #共有的技能:招生
        #独有的特征:地址不一样,老师们,课程
    
    class School:
        tag='etiantian'
        def __init__(self,addr):
            self.addr=addr
            self.teacher_list=[]
            self.course_list=[]
    
        def zhaosheng(self):
            pass
    
    
    #对象:老师---->归类
        #共同的技能:教课
        #独有的特征:名字,性别,level,课程
    
    class Teacher:
    
        def __init__(self,name,sex,level):
            self.name=name
            self.sex=sex
            self.level=level
            self.course_list=[]
    
        def teach(self):
            pass
    
    
    #对象:学生---->归类
        #共同的特征:
        #共同的技能:search_score,handin
        #独有的特征:学号,名字,性别,课程
    class Student:
        def __init__(self,ID,name,sex):
            self.id=ID
            self.name=name
            self.sex=sex
            self.course_list=[]
        def search_score(self):
            pass
    
        def handin(self):
            pass
    
    class Course:
        def __init__(self,name,price,period):
            self.name=name
            self.price=price
            self.period=period
    
    s1=Student('123','sun','female')
    # print(s1.id,s1.name,s1.sex)
    # print(s1.course_list)
    # s1.course_list.append('python')
    # s1.course_list.append('linux')
    # print(s1.course_list)
    
    python_obj=Course('python',15800,'7m')
    linux_obj=Course('linux',19800,'2m')
    
    
    s1.course_list.append(python_obj)
    s1.course_list.append(linux_obj)
    # print(s1.course_list)
    
    print('''student name is:%s
        course name is :%s
        course price is :%s
        ''' %(s1.name,s1.course_list[0].name,s1.course_list[0].price))

        

  • 相关阅读:
    html5——文件断点续传
    前端自制Jquery插件————轮播
    js的订阅发布者模式
    写在前面
    Jmeter用于接口测试中,关联如何实现
    转: centos7 jdk(java) 安装以及安装命令相关知识
    ubuntu12.04上手动安装mysql
    ubuntu12.04 安装和卸载mysql
    Ubuntu 12.04 安装MySQL
    Ubuntu 12.04下安装MySQL图解
  • 原文地址:https://www.cnblogs.com/george92/p/9138253.html
Copyright © 2011-2022 走看看