python基础教程(第三版)学习笔记(七)

本文详细探讨了Python中的类和对象的抽象特性,包括多态、封装和继承。通过实例解释了如何利用这些概念来编写代码。多态允许对不同类型的对象执行相同的操作,封装则隐藏了对象的内部工作细节。此外,文章还介绍了类的创建、属性和方法,以及如何使用`__dict__`、`hasattr`、`callable`等工具进行内省和交互。最后提到了抽象基类的概念,强调了Python中虽然没有接口,但抽象类可以实现类似的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第七章 再谈抽象
自定义`类和对象
7.1 对象魔法
多态:可对不同类型的对象执行相同的操作,而这些操作就像“被施了魔法”一样能够正常运行。
封装:对外部隐藏有关对象工作原理的细节。
继承:可基于通用类创建出专用类。
7.1.1 多态
大致意味着即便你不知道变量指向的是哪种对象,也能够对其执行操作,且操作的行为将随对象所属的类型(类)而异。

7.1.2 多态和方法
与对象属性相关联的函数称为方法。
标准库模块random包含一个名为choice的函数,它从序列中随机选择一个元素。下面使用这个函数给变量提供一个值。
'''

from random import choice 
x = choice(['Hello, world!', [1, 2, 'e', 'e', 4],"张三"]) 
print(x)


'''
执行这些代码后,x可能包含字符串'Hello, world!',也可能包含列表[1, 2, 'e', 'e', 4]。具体是哪一个,你不知道也不关心。你只关心x包含多少个'e',而不管x是字符串还是列表你都能找到答案。者就是方法的多态。

张三


------------------
(program exited with code: 0)

请按任意键继续. . .


7.1.3 封装
指的是向外部隐藏不必要的细节。这听起来有点像多态(无需知道对象的内部细节就可使用它)。这两个概念很像,因为它们都是抽象的原则。它们都像函数一样,可帮助你处理程序的组成部分,让你无需关心不必要的细节。
7.1.4 继承
继承是类的继承,以基类为基础而创建新类或者是专用类。

7.2 类
7.2.1 类是什么
类是对象模型,对象是建立在类的基础上的。张三是人类,黑子是犬类,人和犬是动物类。其中张三和黑子是对象,它是人类和犬类的具体化,而人类和犬类是继承了动物类特性的子类。
7.2.2 创建自定义类
和大部分编程语言一样创建类用关键字class。比如建一个person(人)类,人有姓名,人会说“你好”。
'''

class Person:
    name=""
    def set_name(self,name):
        self.name=name
    def get_name(self):
        return self.name
    def greet(self):
        print("{}你好!".format(self.name))
        


'''
这个类中有一个属性三个方法,分别是设置姓名、获取姓名和输出你好!谁谁;但它只是个模板不是个具体的person(人),还不能直接运行,还必须让它具体到“具体的人”,才可以在程序中起作用,那就是用这个模板创造个对象。
'''

foo=Person()
bar=Person()        #创建了foo和bar两个对象。
foo.set_name("张三")
bar.set_name("李四")   #为这两个对象的name属性赋值(起名字)
foo.greet()
bar.greet()           #两个对象个输出一段话

'''

张三你好!
李四你好!


------------------
(program exited with code: 0)

请按任意键继续. . .


self是什么。对foo调用set_name和greet时,foo都会作为第一个参数自动传递给它们。我将这个参数命名为self,这非常贴切。实际上,可以随便给这个参数命名,但鉴于它总是指向对象本身,因此习惯上将其命名为self。显然,self很有用,甚至必不可少。如果没有它,所有的方法都无法访问对象本身——要操作的属性所属的对象。
'''
'''

class Person:
    名=""
    def set_名(这个,名):
        这个.名=名
    def get_名(这个):
        return 这个.名
    def greet(这个):
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值