Python面向对象

       面向对象编程(Object Oriented Programming,OOP),是一种程序设计思想,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。而面向对象的程序设计把计算机程序视为一组对象集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

       那面向对象编程与面向过程编程到底有什么区别?通过一个例子进行比较:

#面向过程
stu1 = {"name":"aaa","score":90}
stu2 = {"name":"bbb","score":85}
def print_score(stu):
    print("%s: %s" %(stu["name"],stu["score"]))

print_score(stu1) #aaa: 90
print_score(stu2) #bbb: 85

------------这是分界线-----------------

#面向对象,面向对象的设计思想是抽象出class,根据class创建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))

stu1 = Student("aaa",90) #创建实例stu1
stu2 = Student("bbb",85) #创建实例stu2
stu1.print_score() #调用方法,输出aaa: 90
stu2.print_score() #调用方法,输出bbb: 85

1.类和实例

       面向对象最重要的概念就是类(class)实例(instance)抽象的模板,如上述Student类,而实例是根据类创建出来的一个个具体“对象”,如上述stu1对象。

#Python类定义格式
class Classname(object):
    psss

#说明:class关键字定义类,后面紧接类名(类名通常首字母大写),紧接着为(object),表该类是从哪个类继承下来的。如果没有合适的继承类,就用object类,这是所有类最终都会继承的类。
#Python实例
instancename = Classname() #创建了实例instancename,创建实例通过类名+()实现

       __init__

class Student(object):
    #实例属性
    #__init__()叫做初始化方法(构造方法),在类被调用时,这个方法会自动执行,进行一些初始化动作。
    def __init__(self,name,score):
        self.name = name
        self.score = score
    #实例方法
    def print_score(self):
        print("%s: %s" %(self.name,self.score))

    #析构方法,在实例释放、销毁的时候自动执行,通常用于做一些收尾工作。这个方法可选,不是必须写
    def __del__(self):
        print("这里是析构函数,结束啦!")

stu1 = Student("张三",90)#生成一个角色,会自动把参数传给Student下面的__init__()方法,此时相当于Student(stu1,"张三",90)
stu1.print_score()#此时相当于Student.print_score(stu1)

       注意到__init__方法的第一个参数永远是self表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去:

stu1 = Student("aaa",90) #实例stu1
print(stu1.name) #aaa
print(stu1.score) #90

       和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别!

2.访问限制

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

s1 = Student('zhangsan',90)
print(s1.name)#打印实例名称,这里输出为zhangsan
print(s1.score)#打印实例成绩,这里输出为90

s1.score = 100 #在类外部,我们修改实例属性
print(s1.score)#打印输出为修改后的100

       通过上述代码可以发现,类虽然隐藏了内部的复杂逻辑,但是其内部属性可以被外部代码任意修改其属性,有没有什么方法可以不让外部代码修改呢?在Python中,实例变量名如果以 __ 开头,就变成了一个私有变量,只有内部可以访问,外部不能访问,所以,上述代码可以这么修改:

class Student(object):
    def __init__(self,name,score):
        self.__name = name #原self.name修改为self.__name
        self.__score = score #原self.score修改为self.__score

    def print_score(self):
        print('%s: %s'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值