Python类和对象

一、概念

1、面向对象(Object Oriented,即OO),是一种设计思想。

2、面向对象编程(Object Oriented Programming,即OOP),可以使软件设计更加灵活,并且能更好地进行代码复用。

3、对象,通常是指客观世界中存在的对象,这个对象具有唯一性,对象之间各不相同,各有各的特点,每个对象都有自己的运动规律和内部状态;对象与对象之间又是可以相互联系、相互作用的。对象可以是一个抽象的事物,它有自己的属性和行为。

对象(Object),是一个抽象概念,表示任意存在的事物。世间万物皆对象!通常将对象划分为两个部分,即静态部分与动态部分。静态部分被称为“属性”,任何对象都具备自身属性。动态部分指的是对象的行为,即对象执行的动作。

4、类(Class),是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。

在类中可以定义每个对象共有的属性和方法;对象是类的实例。

5、面向对象程序设计的特点:

  • 封装

    封装是面向对象编程的核心思想,将对象的属性和行为封装起来,其载体就是类,类通常会隐藏其实现细节。采用封装思想保证了类内部数据结构的完整性,类的使用者不能直接看到类中的数据结构,而只能执行类允许公开的数据,这样就避免了外部对内部数据的影响,提高了程序的可维护性。

  • 继承

    子类的实例都是父类的实例,但不能说父类的实例是子类的实例。继承是实现重复利用的重要手段,子类通过继承复用了父类的属性和行为的同时又添加了子类特有的属性和行为。

  • 多态

    将父类对象应用于子类的特征就是多态。子类继承父类特征的同时,也具备了自己的特征,并且能够实现不同的效果,这就是多态化的结构。

二、类的定义和使用

在Python中,类表示具有相同属性和方法的对象的集合。在使用类时,需要先定义类,然后再创建类的实例,通过类的实例就可以访问类中的属性和方法。

  • 定义类

语法格式:

class  ClassName:
    '''类帮助信息'''    # 类文档字符串
    statement      # 类体

参数说明

参数说明
ClassName类名,首字母大写,采用驼峰式命名法
'''类帮助信息'''类的文档字符串,定义该字符串后,在创建类的对象时,输入类名和左侧的括号后,将显示该信息
statement类体,主要由类变量(或类成员)、方法和属性等定义语句组成。可以使用pass语句代替。
  • 创建类的实例

定义类,并不会创建实例。类好比汽车的设计图。

类定义完成后,可以创建类的实例,即实例化该类的对象。语法格式:

ClassName(parameterlist)

当创建一个类时,没有创建__init__()方法或者当__init__()方法只有一个self参数时,parameterlist可以省略

注意:Python中创建实例不使用 new 关键字

在创建类后,类通常会自动创建一个__init__()方法,类似Java中的构造方法。每当创建一个类的新实例时,Python都会自动执行它。

__init__()方法必须包含一个self参数,并且必须是第一个参数。self参数是一个指向实例本身的引用,用于访问类中的属性和方法。在方法调用时会自动传递实际参数self。

  • 创建类的成员并访问

类的成员主要包括实例方法和数据成员。

实例方法

所谓实例方法是指在类中定义的函数。

实例方法的第一个参数必须是self,并且必须包含一个self参数。

创建实例方法的语法格式如下:

def functionName(self, parameterlist):
    block

实例方法和Python中的函数的主要区别就是,函数实现的是某个独立的功能,而实例方法是实现类中的一个行为,是类的一部分。

可以通过类的实例名称和点操作符进行访问。语法格式如下:

instanceName.functionName(parametervalue)

数据成员

数据成员是指在类中定义的变量,即属性。根据定义位置,又可分为类属性和实例属性。

类属性是指定义在类中,并且在函数体外的属性。类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中公用。

类属性可以通过类名称或者实例名称访问。

实例属性是指定义在类的方法中的属性,只作用于当前实例中。

实例属性只能通过实例名称访问。如果通过类名称访问实例属性,将抛出异常:type object 'XXX' has no attribute 'xxx'

对于实例属性也可以通过实例名称修改,与类属性不同,通过实例名称修改实例属性后,并不影响该类的其他实例中相应的实例属性的值。

  • 访问限制
  1. 默认public,访问方式:实例名.xxx  或  类名.xxx
  2. 在属性或方法名前面添加单下划线:表示保护类型的成员,只允许类本身和子类进行访问,但不能使用“ from module import * "语句导入;访问方式:实例名._xxx  或  类名.xxx
  3. 在属性或方法名前面添加双下划线:表示私有类型的成员,只允许定义该方法的类本身进行访问,而且也不能通过类的实例进行访问,但是可通过” 类的实例名._类名__xxx ”方式访问;在该类实例方法中可以通过“ 类名.属性名 ”方式访问。
  4. 在属性或方法名首尾添加双下划线:表示定义特殊方法,一般是系统定义名字。

三、属性

一种特殊的属性,访问它时将计算它的值。另外,该属性还可以为属性添加安全保护机制。

  • 创建用于计算的属性

使用@property(装饰器)将一个方法转换为属性,从而实现用于计算的属性。可以直接通过方法名来访问方法。

创建用于计算的属性的语法格式:

@property
def methodname(self):
    block

 

 

 

 

 

转载于:https://my.oschina.net/happyran/blog/3089830

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值