UCI-ICS第三周笔记(2)

目录

Classes(类)


Classes(类)

在像Python这样支持面向类的编程语言中,类被用来为可以在程序代码中执行状态行为操作的对象创建模板。类包含采用数据属性方法形式的属性引用。类数据属性和方法在语法上与到目前为止使用Python编写的变量和函数相同。主要的区别在于,数据属性和方法是在包含它们的类的实例上调用和操作的。

类使用类似于函数的语法声明:

class Fruit:
  pass

上面的例子代表了可以在Python中创建的最简单的类。如果我们想要使用这个类,我们可以实例化或创建一个我们创建的Fruit的实例,并把它当作Python中的任何其他对象来对待:

class Fruit:
  pass

fruit = Fruit()

print(fruit)

这将在Python shell中显示类似如下内容:

>>> <__main__.Fruit object at 0x7ff56b3a78e0>

Python解释器将变量fruit识别为fruit类的实例,并输出其字符串表示。当然,由于Fruit定义没有任何成员,我们还不能对它做任何事情。让我们赋予它一些目的:

class Fruit:
  fruit_type:str
  color:str
  is_seedless:bool
  condition:str  

现在Fruit类有一些属性可以用来描述水果的共同特征。在类被实例化之前,它只是作为一种蓝图存在,告诉我们它应该做什么以及它应该如何工作。如果这听起来令人困惑,那么将类看作食谱,将类的实例看作它生产的可食用食物可能会有所帮助。让我们继续这个食物的比喻,使用之前代码片段中创建的Fruit蓝图来创建一些不同类型的水果:

apple = Fruit()
apple.fruit_type = "apple"
apple.color = "green"
apple.is_seedless = False
apple.condition = "ripe"

banana = Fruit()
banana.fruit_type = "banana"
banana.color = "brown"
banana.is_seedless = False
banana.condition = "rotten"

print(apple)
print(banana)

当运行时,代码片段底部的print语句将在Python shell中显示以下内容:

<__main__.Fruit object at 0x7f6f9366b880>
<__main__.Fruit object at 0x7f6f9366add0>

注意,这两个变量的类型是相同的:Fruit,但是Python解释器使用的字符串表示是不同的。这告诉我们,尽管这两个对象都是Fruit的实例,但它们不是同一个对象。这是使类在Python中有用的特性之一。我们可以根据自己确定的规则创建自己的类型。

到目前为止,Fruit类只被编写用来保存一些简单的属性。这些属性的值是任意的。因为它们大多是string类型,所以可以将它们设置为我们想要的任何字符串值。例如:

banana = Fruit()
banana.condition = "sick"

即使上面的代码片段在编程上是有效的,它也没有多大意义,对吗?如果我们希望这个类被其他程序员使用,或者确保我们总是正确地使用它,我们应该锁定class属性条件的可用选项。完成这个任务的方法有很多种,但我们在这节课只讨论一种。我们将在本季度晚些时候的高级课程讲座中介绍其他一些内容。现在,让我们回到Fruit类:

class Fruit:
  fruit_type:str
  color:str
  is_seedless:bool
  picked_date:str

  def get_condition():
    condition = "unknown"
    age = check_age(self.picked_date)
    if age <= 4:
      condition = "unripe"  
    elif age > 4 and age < 10:
      condition = "ripe"
    elif age > 10:
      condition = "rotten"
    
    return condition

我们要做的第一件事是添加一个新属性,用于存储水果的采摘日期。然后,用一个名为get_condition的方法(或类函数)替换条件属性。这种新方法现在可以控制这种水果可能出现的各种条件。我们假设有另一个可用的方法check_age,它可以根据新的pickd_date属性中存储的值计算水果的年龄。请注意,要实现check_age方法,代码片段将需要使用一个额外的模块、一些日期/时间计算,并使我们离Lecture的目标太远。让我们创建一个修改后的Fruit类的实例,并尝试新的get_condition方法:

apple = Fruit()
apple.fruit_type = "apple"
apple.color = "green"
apple.is_seedless = False
apple.picked_date = "1/17/2022"

print(apple.get_condition())

取决于你读这节课的日期,你的苹果可能是生的,成熟的,甚至可能是烂的(尽管我希望不是!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值