Python面向对象基础

一、面向对象技术简介

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

  • 方法:类中定义的函数。

  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

  • 局部变量:定义在方法中的变量,只作用于当前实例的类。

  • 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。

  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

  • 实例化:创建一个类的实例,类的具体对象。

  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。

对象可以包含任意数量和类型的数据。

二、类和对象的关系

1、面向对象和面向过程的区别?

面向过程:怎么做
面向对象:谁来做

2、面向对象的思路

1.确定职责 – 要做的事(方法)
2.对象内部封装不同方法(多个)
3.不同对象调用不同方法

3、类和对象的关系

类:类是模板,对象都是根据这个模板创建出来的,即对象是由类创造出来的具体存在,在开发中,先有类再有对象

类只需要有一个,对象可以有多个

4、属性和方法

1、类名:某一类事物的名字,满足大驼峰命名,没有下划线
2、属性:类创造出来的对象的特性
3、方法:对象的行为

例如:
老李今年38岁,身高1.85,每天早上要跑步,跑完会去吃东西
老吴今年36岁,身高1.65,老吴不跑步,老吴喜欢吃东西

类名:Person
属性:name、age、height
方法:run()、eat()

示例:
代码块:

class Cat():
    def eat(self):
        print('%s爱吃鱼' %self.name)
    def drink(self):
        print('小猫要喝水')

tom = Cat()
tom.name = 'Tom'
tom.drink()
tom1 = Cat()
# print(tom1)
tom1.drink()
print(id(tom))
print(id(tom1))

程序及运行结果:
在这里插入图片描述
在这里插入图片描述

三、类的定义与实例化

1、如何定义类 class 类名(): pass
2、类创建对象的过程称为实例化,把抽象的类具体化
3、 对象名 = 类名(参数1、参数2…参数n)

示例:
代码块:

class People():
    #属性:类中的变量
    name = '老李'
    age = 38

    #方法:类中的函数
    def eat(self):
        print('吃...')

    def sleep(self):
        print('正在睡...')

#实例化:通过类创建对象
p1 = People()
p2 = People()
# print(id(p1))
# print(id(p2))

print(p1.name)
print(p2.name)

p1.eat()
p2.eat()

程序及运行结果:
在这里插入图片描述
在这里插入图片描述
注意: 实例化后的两个对象是不一样的。两个对象调用任何一个方法的结果都是一样的。

为了解决这一问题,我们需要利用函数进行封装,此目的就是将对象和属性封装在一起,从而使其能灵活运用,如下所示:

代码块:
self代表类的实例,而非类

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self

class People():
    #构造方法:
    def __init__(self):
        print('self',self)

p1 = People()
print('p1',p1)

程序及运行结果:
在这里插入图片描述
从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。

self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42566251

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值