Python基础(9)-面向对象编程-(1)

面向对象

面向对象编程(oop)是一种程序设计思想。在面向对象编程中,对象时程序的基本单元。在Python中,所有数据类型都可以视为对象,自定义对象数据类型就是面向对象中的类(class)的概念。
比如:

class Student(object):
    def __init__(self,name,score):
        self.name=name
        self.score=score
    def print_score(self):
        print('name:%s,score:%d'%(self.name,self.score))

以上就是一个类的定义,Student是一个抽象的数据类型,执行S1=Student('lama',12)S1是类的实例,也就是对象。
面向对象编程的三大特点是:
* 封装,继承 多态*

类和实例

Instance(实例)就是类(class)的具体化,比如a=10  a就是实例,类是int

类的定义
关键字class开头,后面紧跟类名,类名通常为大写字母开头,紧接着是(object),表示该类从哪个类继承。如果没有,则都写object,这是所有类都要继承的类。如下:

class Student(object):
    pass

创建实例:
创建实例通过类名()实现的。如下:

S1=Student()

注意:Python中类和C++中不一样的是,在Python中可以随意给实例绑定属性。
比如上例中,我们给S1添加city 属性

>>> S1.city='nantong'
>>> S1
<__main__.Student object at 0x000001D08D424B00>
>>> S1.city
'nantong'

由此可以看到,本来类中是没有该属性的,但是通过实例,可以给该实例绑定一个对象。

特殊方法__init__(self,...)

由于类起到模板的作用,所以在创建实例时,我们可以把必须绑定的属性强制添加进去,通过定义特殊的方法(函数)__init__
__init__ 第一个参数永远是self表示实例本身,创建实例时,必须传入和__init__方法匹配的参数,self不需要。注意,该方法在创建实例时,自动调用。

数据封装

作用:在外部如果需要访问实例内部的属性参数,则可以用实例名.属性名来访问和修改,而这样的结果就是,实例内的数据并不安全,我们需要使用类的方法(函数)来访问这些属性参数,实现封装。
方法:虽然可以通过方法访问实例的属性,但是依然可以在外部访问实例属性,所以采用将属性名称前加上两个下划线,变为一个私有属性(private)。只有内部可以访问,外部不可以访问。代码实例如下:

class Student(object):
    def __init__(self,name,score):
        self.__name=name
        self.__score=score
    def Get_Name(self):
        return self.__name
    def Get_Score(self):
        return self.__score

执行结果如下:

>>> S1=Student('lama',22)
>>> S1.name
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    S1.name
AttributeError: 'Student' object has no attribute 'name'
>>> S1.__name
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    S1.__name
AttributeError: 'Student' object has no attribute '__name'
>>> S1.Get_Name
<bound method Student.Get_Name of <__main__.Student object at 0x000001E4CCC1A400>>
>>> S1.Get_Name()
'lama'

所以外部就访问不了私有属性了。
注意:在Python中 _xxx_的变量,是特殊变量,特殊变量可以访问,不是private变量。但是其实只是私有变量名被解释器改变了,我们可以使用dir(实例名)先获取改变的属性名,再访问。比如:

class Student(object):
    def __init__(self,name,score):
        self.__name=name
        self.__score=score
    def Get_Name(self):
        return self.__name

定义了两个私有属性,__name__score,我们执行如下:

>>> S1=Student('lama',99)
>>> dir(S1)
['_Student__name', '_Student__score', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> S1._Student__name
'lama'

你看,我们可以访问私有属性了,更改试试,:

S1._Student__name='LAMA'
>>> S1.Get_Name()
'LAMA'

可以看到,私有成员确实被改变了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值