《Python语言程序设计》第七章学习笔记

《Python语言程序设计》学习笔记

笔记选自《Python语言程序设计》[美]梁勇 著
本篇笔记没有记录用python绘画的turtle库


第7章 对象和类

  • 插播一条英语小知识:图形用户界面(GUI,读作goo-ee)。

  • 定义类:

class Circle:
  def __init__(self, radius=1):
    self.radius=radius  # 数据域radius在初始化程序中被创建
  • 构造对象
    完成两个任务:
    (1)在内存中为类创建一个对象;
    (2)调用类的__init__方法来初始化对象。

包括初始化程序的所有方法,都有第一个参数self。这个参数指向调用方法的对象。__init__方法中的self参数被自动地设置为引用刚被创建的对象。

  • 创建对象:c1是一个变量,它包含一个指向Circle对象的引用
c1=Circle(5) # 创建radius=5的Circle对象
c2=Circle() # 创建radius为默认值1的Circle对象
  • 访问对象成员:使用圆点运算符(.)访问对象的数据域并调用它的方法,也称为对象成员访问运算符。
objectRefVar.datafield
objectRefVar.method(args)
  • 通常,你创建一个对象并将它赋给一个变量。随后,你可以使用变量指代这个对象。偶尔,对象也不需要随后被引用。在这种情况下,你可以创建一个对象而不需要明确将它赋值给变量,如下所示:
print("Area is", Circle.getArea())

这个语句创建Circle对象并调用它的getArea方法来返回它的面积。以这种方式创建的对象被称为匿名对象

  • self参数:
    self是指向对象本身的参数,可以使用self访问在类定义中的对象成员
    一个实例变量被创建,作用域就是整个类:self.x self.y不同方法中被创建后的作用域整个类
    注意:你也可以在方法中创建局部变量。局部变量的作用域是在该方法内。局部变量z在方法m1中被创建,而它的作用域就是从它创建时起到方法m1结束。
def ClassName:
  def __init__(self, ...)
  self.x = 1 # 作用域是整个类

  def m1(self, ...)
    self.y = 2 # 作用域是整个类
    z = 5 # 作用域是这个方法m1

  def m2(self, ...)
    self.y = 3 # 更改m1方法中创建的y的值

    u=self.x + 1 # 使用init方法中创建的x的值
    
    self.m1(...) # 调用函数m1
  • 注意:看似保存一个对象的变量实际上包含的是指向这个对象的引用。严格地讲,变量和对象是不同的,但大多数情况下,两者的区别是可以忽略的。所以,为了简单起见,最好说“circle1是一个Circle对象”,而不会冗长地描述为“circle1是一个变量,它包含一个指向Circle对象的引用”。

  • 不变对象和可变对象:当将一个可变对象传给函数时,函数可能会改变这个对象的内容。
    当你将一个对象传递给函数,就是将这个对象的引用传递给函数。但是,传递不可变对象和可变对象之间还有更重要的区别。

    • 像数字或字符串这样的不可变对象参数,函数外的对象的原始值并没有被改变。
    • 像圆这样的可变对象参数,如果对象的内容在函数内被改变,则对象的原始值被改变。
  • 隐藏数据域:私有数据与是以两个下划线开始来定义的;也可以使用两个下划线开始来定义私有方法。
    为了让客户端能访问数据域,就要定义get、set方法

一个get方法有下面的方法头:

def getPropertyName(self):

如果返回类型是布尔型,那么习惯上get方法被如下定义:

def isPropertyName(self):

一个set方法有下面的方法头:

def setPropertyName(self, propertyValue):
import math
class Circle:
  def __init__(self, radius=1):
    self.__radius=radius
  def getRadius(self):
    return self.__radius
  def getPerimeter(self):
    return 2*self.__radius*math*pi

本章总结

  1. 类是一种对象的模板、蓝图、合约和数据类型。它定义了对象的属性,并提供用于初始化对象的初始化程序和操作这些属性的方法。
  2. 初始化程序总是以__init__命名。每个方法的第一个参数包括类中的初始化程序,它指向调用这个方法的对象。按照惯例,这个参数以self命名。
  3. 对象是类的一个实例。你使用构造方法来创建一个对象,使用圆点运算符(.)通过引用变量来访问对象的成员。
  4. 实例变量或方法属于类的一个实例。它的使用和每个独立的实例相关联。
  5. 类中的数据域应该被隐藏以避免被更改并使类易于维护。
  6. 你可以提供get方法或set方法使客户端可以查看或更改数据。通俗地讲,get方法被称为获取器(或访问器),而set方法被称为设置器(或修改器)。

关键术语

英文中文
abstract data type(ADT)抽象数据类型
accessor(getter)访问器(获取器)
action动作
class
class abstraction类抽象
class encapsulation类封装
class’s contract类的合约
client客户端
constructor构造方法
data fields数据域
data hiding数据隐藏
dot operator(.)圆点运算符(.)
identity实体
initializer实例
instance实例方法
anonymous object匿名对象
attributes属性
behavior行为
instance variable实例变量
instantiation实例化
mutator(setter)修改器(设置器)
object-oriented programming(OOP)面向对象程序设计(OOP)
private data fields私有数据域
private method私有方法
property属性
state状态
Unified Modeling Language(UML)统一建模语言(UML)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值