Python 类和对象

面向对象的程序设计分为两种,一种是基于类的,另一种是基于原型的。其中基于类的程序设计是最常见的一种,它主要涉及到两个概念,即类和对象。类是一个抽象的概念,它描述了一类具有相同属性和方法的对象,而对象则是具体的实例。在基于类的程序设计中,类用于描述对象的属性和方法,而对象则是类的具体实现。因此,基于类的程序设计更注重对象的封装、继承和多态等概念

什么是类?

类:是对象的抽象,定义了一组大体相似的对象结构,定义了数据(属性)和行为(方法)。

类包括实体类(用于对必须存储的信息和相关行为建模的类,是需要长久保存且一直存在的类)、边界类(系统内部与系统外部的业务主角之间进行交互建模的类)、控制类(用于对一个或几个用例所特有的控制行为进行建模,在用例执行过程中被动出现的特定行为的类)。在领域类模型中会涉及描述类自身情况的属性与操作,还会有描述类与类之间的关联,但不会有对象层次的内容。
类实质上就是封装对象属性和行为的载体,而对象是类中具体的一个实例。

在Python中如何定义一个类?

class定义一个类名,类名下设置方法,设置方法的格式与定义函数的格式相同,主要区别在于方法必须显式地声明一个self参数,而且位于参数列表的开头。self表示类的实例(对象)本身,可以用来引用对象的属性和方法

根据类创建对象的语法格式如下:

使用对象的本质是访问对象成员:

在类的代码中我们可以定义变量和函数

-变量会成为该类实例的公共属性,所有的该类实例都可以通过 对象名.属性名 的形式访问

-函数会成为该类实例的公共方法,所有的该类实例都可以通过 对象名.方法名 的形式调用方法

其中 方法调用时,第一个参数由解释器自动传递,所以定义方法时,至少要定义一个形参,第一个参数就是解释器调用的方法本身 

类中定义的属性和方法都是公共的,任何该类的实例属性都可以访问 

属性和方法 

属性按声明方式可以分为两种:类属性和实例属性

  • 实例属性一般是指在构造函数_init_()或类的方法中定义的,定义和使用时必须以self为前缀,只能通过对象访问。Python支持动态添加实例属性。
  • 类属性属于类,是在类中所有方法之外定义的数据成员,可以通过类名或对象名访问,但只能通过类进行修改

类体中、所有函数之外:此范围定义的变量,称为类属性类变量

类体中,所有函数内部:以“self.变量名”的方式定义的变量,称为实例属性实例变量

类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。

访问实例属性——只能通过对象访问

修改实例属性——通过对象修改

动态添加实例属性——类外部使用对象动态添加实例属性

类属性声明在类内部、方法外部的属性,可以通过类或对象进行访问,但只能通过类进行修改

Python通过在类成员的名称前面添加双下划线(_)的方式来表示私有成员,语法格式如下:

  • __属性名
  • __方法名

私有成员在类的内部可以直接访问,一般在类的外部不能直接访问,但可以通过调用类的公有成员方法的方式进行访问,还可以通过特殊方法调用,语法:对象名.__类名+私有成员(此方法用于测试和调试,一般不建议使用) 

类是客观事物的抽象,对象是类的实例化。Python使用class关键字定义类。

我们在类中所有方法之外定义的变量称为类属性,或者称作静态属性。类属性既可以用类名称访问,也可以用 对象名称访问 。使用格式为:“对象名称 . 变量名称”; “类名称 . 变量名称

class Animal:
    name = '团团'
    type = '熊猫'
    def food(self):
        print('竹子')
guobao = Animal()
print('我的名字是',guobao.name)
print('我是一只',Animal.type)

输出结果:

我的名字是 团团  

我是一只 熊猫 

在上述示例中,我们通过对象名称guobao访问name得到变量 团团,通过类名称Animal访问type得到变量熊猫 

class 类名:

类的内部实现

class关键字后紧跟空格,空格之后是类的名称。类名称之后必须有冒号,然后换行,通过缩进控制逻辑关系;最后定义类的内部实现。

根据编程规范,类名一般首字母大写

对象属性一般是指在 __init__ 构造方法中声明的属性,只能通过对象名称访问。

class Animal:
    name = '轩轩'
    type = '熊猫'
    def __init__(self, age):
        self.age = age
    def food(self):
        print('竹子')
guobao = Animal(2)
print('我的名字是',guobao.name)
print('我是一只',Animal.type)
print('我的年龄是',guobao.age,'岁')

类的基本结构

#类的基本结构
class 类名([父类])
    属性名 = 属性值 #公共属性
    #对象的初始化方法
    def __init__(self,...):
        pass
    
    #其他方法
    def 方法名(self,...):
        pass
    def 方法名(self,...):
        pass

封装

封装是面向对象程序设计的核心思想,将对象的属性和方法封装起来

私有属性和私有方法都属于Python封装的形式,通过在属性和方法前加上两个下划线的方式,

 限制类外对类内属性和方法的访问和修改。

私有属性和私有方法不能直接访问,否则就会报错。通过加上类名的形式进行访问能够成功访问,但是不建议使用

        在 Python 面向对象中,类是由属性与方法组成的。其中,属性是对数据的封装,相当于一个对象所的静态 特征,属于类或者或者属于对象而有不同的定义与使用方法,类属性是在类中方法之外但又在类之中定义的属性,对象 属性是在构造函数中定义的属性。属性除分为类属性和对象属性外,还分为公有或私有,其通过标识符来区分。私有属 性不可以在类和实例的外部调用,若想强制访问私有属性及方法,可在私有属性及方法名前加 _ 类名

方法1:将对象的属性名,修改为一个外界不知道的名称

继承 

继承是面向对象三大特征之一

通过继承我们可以使一个类获取其他类的属性和方法

在定义类时,可以在类名后的括号中指定当前类的父类(超类、基类、super)

子类(衍生类)可以直接继承父类中的所有属性和方法,避免编写重复性的代码

因此我们经常通过继承来对一个类进行拓展

在创建类时,如果省略了父类,则默认父类为object

object是所有类的父类,所有类都继承自object

isinstance用来检查一个对象是否是一个类的实例

如果这个类是这个对象的父类 同样也会返回true

所有对象都是object的一个实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值