Python零基础之面向对象(对象,类,属性和方法)

本文详细介绍了Python面向对象编程的基本概念,包括对象的结构、可变性和不可变性,以及面向对象的三大特性:封装、继承和多态。此外,还讲解了如何使用class关键字创建类,以及对象的实例化、属性和方法的使用。

1. 对象的简介

  • Python就是一个面向对象的编程语言
  • 对象就是内存中用来存储数据的一块区域
  • 对象也成为类的实例
  • 对象的结构:
    • id(): 标识 (唯一的,在C Python中,就是对象的 内存地址)
    • type(): 类型 (用来表示当前对象所处类型,决定了对象的功能)
    • value(): 值 (对象中存储的具体数据)
      • 可变对象和不可变对象
      • 不可变对象值不能改变,可变对象值可以改变
  • 面向过程的编程方式:
    • 编程逻辑简单, 思路清晰
    • 复用困难, 修改困难
  • 面向对象的编程方式:
    • 所有操作通过对象进行
    • 复用简单

2. 面向对象

  • 面向对象的三个特点:
    • 封装:把对象的属性私有化,同时提供可以被外界访问这些属性的方法。
    • 继承:是使用已存在的类的定义,作为建立新类的基础技术,新类可以增加新的属性或新的方法,也可以用父类的功能,但不能选择性地继承。通过使用继承,能够非常方便地复用这些代码。
    • 多态:表现为程序中定义的引用变量,所指向的具体类型和具体调用的方法,在编译期并不能确定,而是在程序运行期确定。
  • 面对对象的技术方法:
    • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
    • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
    • 数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
    • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
    • 局部变量:定义在方法中的变量,只作用于当前实例的类。
    • 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
    • 继承:把对象的属性私有化,同时提供可以被外界访问这些属性的方法。
    • 实例化:创建一个类的实例,类的具体对象。
    • 方法:类中定义的函数。
    • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

3. 创建类class

3.1使用class创建类

  • 类也是一个对象
  • 类是一个type类型的对象
  • 语法:()中如果没有父类可以不加
  • 类名首字母大写

class 类名([父类]):

class Myclass():
    pass
# print(Myclass)
# 创建对象mc,mc即Myclass的实例
mc = Myclass()
print(mc,type(mc))

<main.Myclass object at 0x00000111BEAFC668> <class ‘main.Myclass’>

3.2 isinstance() 用来检查是否属于某个类

  • 返回True或False
r = isinstance(mc,int)
print(r)

False

3.3 向对象中添加变量

  • 语法:
  • 对象.属性名 = 属性值
class Myclass():
    pass

# print(id(Myclass),type(Myclass))
mc = Myclass()
mc2 = Myclass()
# 向对象中添加变量
# 语法:
# 类名.属性名 = 属性值
mc.name = '孙悟空'
mc2.name = '白骨精'
print(mc.name)
print(mc2.name)

3.4 类的定义

    1. 类名 大写
    1. 类中的函数要定义至少一个默认形参
    1. 类中函数的调用时,不必输入默认形参,解析器可以自动传入
# 类的定义

class Person():
    # 在类中的代码块可以定义变量和函数
    # 类中定义的变量和函数会成为公共属性或公共方法
    name = '钢铁侠'
    # 在类中定义方法时需要定义默认形参
    # 否则会报错:speak() takes 0 positional arguments but 1 was given
    # 添加默认形参
    def speak(w):
        print('hello')

p1 = Person()
p2 = Person()
# 默认形参由解析器自动传递
# 调用时不用输入默认形参
p1.speak()

3.6 属性和方法

  • 实例对象可以访问到类对象中的属性和方法
  • 查找流程:(先找自己)
    • 先找当前对象,有则返回,没有则下一步
    • 再找所在类,有则返回,没有则报错
  • 如果为共享的,保存到类中
  • 如果为独有的,保存到实例对象中
  • 一般情况下
    • 属性保存到实例
    • 方法保存到类

3.6 类中函数的默认参数-self参数

  • 默认传参一般写作self
  • 哪个对象调用,self就是谁
# 类不同于闭包,内部函数无法访问外部变量
class Person():
    name = '超人'
    # 在类中定义方法会默认传递参数
    # 谁调用就传递谁,p1调用self就是对象p1,如果p2调用,w就是对象p2
    # 一般把默认传参称作self
    def speak(self):
        print('你好我是%s'%self.name)
        # print(w)
p1 = Person()
p2 = Person()
p1.name = '孙悟空'
p2.name = '猪八戒'
p1.speak()
p2.speak()

你好我是孙悟空
你好我是猪八戒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kingx3

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

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

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

打赏作者

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

抵扣说明:

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

余额充值