zoukankan      html  css  js  c++  java
  • 面向对象知识点

    面对对象编程(程序思想)

    面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

    OOP 把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数,而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

    class:类

    ​ 类具有属性(Property),属性的查找顺序应该首先从对象自身寻找(类外)再从类中的属性绑定中(init)查找,找不到即报错

    给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。

    instance:实例

    class Student(object):          
    
        def __init__(self,name,score):
            self.name =name
            self.score =score
    
        def print_score(self):
            print('%s:%s'%(self.name,self.score))
    
    bart = student('bart simpson',59)
    lisa =student('lisa simpson',87)
    
    bart.print_score()
    lisa.print_score()
    

    ​ 类(Class)和实例(Instance)的概念是很自然的。Class 是一种抽象概念,比如我们定义的 Class—Student,是指学生这个概念,而实例(Instance)则是一个个具体的 Student,比如,Bart Simpson 和 Lisa Simpson 是两个具体的 Student。

    数据封装、继承和多态是面对对象的三大特点

    定义

    #定义类是通过class关键
    
    class Student(object):  #Student类名形式一般以驼峰体为主
        					#如果无合适的继承类,就是用object类(所有类最终都会继承)
    	def __init__(self,name,score)
        	self.name = name
            self.score = score
            				#注意到__init__方法的第一个参数永远是 self,表示创建的实例本						 身,因此,在__init__方法内部,就可以把各种属性绑定到 self,						 因为 self就指向创建的实例本身。
    	
        def print_score(self):      #方法这其实就是在数据封装
            print('%s:%s'%(self.name,self.score))
           
        def get_grade(self):           
            if self.score > 90:
                print('A')
            elif self.score > 60:
                print('B')
            else:
                print('C')
            
    
    a = Student('wangqiang',98)
    print(a.name)    #wangqiang
    print(a.score)   #98
    
    a.print_score()	#wangqiang:98
    
    a.get_grade()	#A
    
    #特别:
    
    class Student(object):
        name = 'cloud'
        def __init__(self,name,score):
    
            name = 'c'
            self.name = name
            self.score = score
    
    
        def print_score(self):
            print('%s:%s'%(self.name,self.score))
    
    a = Student('a',98)
    print(a.name)		# ‘c’
    

    ​ 类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响

    访问限制

    class Student(object):
    
        def __init__(self,name,score):
            self.__name = name
            self.__score = score
    
        def get_name(self):
            print(self.__name)
    
    a = Student('wangqiang',98)
    print(a.score)	#98
    a.score = 89
    print(a.score)	#89(外部修改内部属性)
    
    #从前面 Student 类的定义来看,外部代码还是可以自由地修改一个实例的 name、score 属性
            
    #把属性的名称前加上两个下划线__,在 Python 中,实例的变量名如果以__开头,就变成了一个私有变量private),只有内部可以访问,外部不能访问。这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。
        def get_score(self):
            print(self.__score)
    
    a = Student('wangqiang',98)
    
    print(a.score)	#AttributeError: 'Student' object has no attribute '__name'
    
    a.get_score()	#只能通过类内部get_score获取具体属性
    
    #如果又要允许外部代码修改 score 怎么办?可以再给 Student 类增加set_score 方法:
    	def set_score(self,score):
            self.__score = score
    
    a = Student('wangqiang',98)
    a.get_score()	#98
    a.set_score(89)
    a.get_score()	#89(内部中修改内部属性)
    
    #与从外部修改内部属性相比,因为在方法中,可以对参数做检查,避免传入无效的参数:
    

    注意:在Python中,变量名类似__xxx__的,也就是以双下划线开头,并以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以不能用这样的变量名。

  • 相关阅读:
    [ Linux ] rsync 对异地服务器进行简单同步
    [ Skill ] 遍历整个项目设计的两个思路
    [ Skill ] 不常用的函数笔记
    [ Perl ] Getopt 使用模板
    [ Skill ] 两个 listBox 数据交换的模板
    [ Linux ] "真"后台 nohup
    [ VM ] VirtualBox 压缩 .vdi
    [ Skill ] Layout 工艺移植,还原库调用关系
    win8 hyper-v 禁用不必卸载虚拟机
    BM算法解析(计算机算法-设计与分析导论(第三版))
  • 原文地址:https://www.cnblogs.com/bruce123/p/11074649.html
Copyright © 2011-2022 走看看