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))

        

  • 相关阅读:
    python 执行sql得到字典格式数据
    python爬虫 url链接编码成gbk2312格式
    windows环境下elasticsearch安装教程(单节点)
    python SQLServer 存储图片
    爬虫的本质是和分布式爬虫的关系
    requests form data 请求 爬虫
    mysql 删除 binlog 日志文件
    查看mysql数据表的大小
    xshell 连接报错 Disconnected from remote host
    centos 7.3 安装 mysqldb 报错 EnvironmentError: mysql_config not found ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  • 原文地址:https://www.cnblogs.com/george92/p/9138253.html
Copyright © 2011-2022 走看看