Python3 进阶课程 / 类

我们先前看过两种编程模式 - 命令式(使用语句,循环和函数)和 函数式(使用纯函数,高阶函数和递归)。

另一个非常流行的范例是面向对象编程(OOP)

对象是使用类来创建的,而这些类实际上是 OOP 的模具。

这个类描述了这个对象是什么,但是和对象本身是分开的。换句话说,一个类可以被描述为一个对象的蓝图,描述或定义。

您可以使用相同的类作为创建多个不同对象的蓝图。

类是使用关键字 class 和一个包含类方法的缩进块创建的。

下面是一个简单的类和它的对象的例子。

class Cat:
    def __init__(self, color, legs):
        self.color = color
        self.legs = legs
felix = Cat("ginger", 4)
rover = Cat("dog-colored", 4)
stumpy = Cat("brown", 3)

print("felix:",felix.__dict__) #dict是用来存储对象属性的一个字典,其键为属性名,值为属性的值.
print("rover:",rover.__dict__)
print("stumpy:",stumpy.__dict__)

这段代码定义了一个名为 Cat 的类,它有两个属性:color 和 legs。
然后这个类被用来创建这个类的3个独立的对象.


__init__

__init__ 方法是一个类中最重要的方法。

这是在创建类的实例(对象)时使用类名称作为函数调用的。

所有的方法都必须以 self 作为自己的第一个参数,虽然它没有被明确地传递,但是 Python 为自己添加了自变量;

在调用方法时,不需要包含它。在一个方法定义中,self 指的是调用该方法的实例。

注意: __init__ 是两个下划线, 不是一个下划线 _init_

类的实例具有属性,这些属性是与它们相关联的数据片段。

在这个例子中,Cat 实例具有属性 color 和 legs。这些可以通过在一个实例之后加一个点和属性名来访问

在 __init__ 方法中,可以使用 self.attribute 来设置实例属性的初始值。

例如:

class Cat:
  def __init__(self, color, legs):
#Cat 实例具有属性 color 和 legs
    self.color = color
    self.legs = legs

felix = Cat("ginger", 4)
print(felix.color)#加一个点和属性名来访问
#输出:ginger

在上面的例子中,__init__ 方法接受两个参数并将它们分配给对象的属性。__init__ 方法被称为类构造函数


Python3 进阶课程 / 类插图
习题1

方法

类可以定义方法来为其添加功能。

请记住,所有的方法必须有 self 作为他们的第一个参数

这些方法使用与属性相同的点语法进行访问

例如:

class Dog:
  def __init__(self, name, color):
#self 作为他们的第一个参数
    self.name = name
    self.color = color

  def bark(self):
    print("Woof!")

fido = Dog("Fido", "brown")
print(fido.name)
#与属性相同的点语法进行访问
fido.bark()

结果:

Fido
Woof!

类还可以具有通过在类的主体内分配变量而创建的类属性。这些可以从类的实例或类本身访问。

例如:

class Dog:
  legs = 4
 #通过在类的主体内分配变量而创建的类属性
  def __init__(self, name, color):
    self.name = name
    self.color = color

fido = Dog("Fido", "brown")
print(fido.legs)
#从类的实例或类本身访问
print(Dog.legs)

结果:

4
4

类属性由类的所有实例共享


Python3 进阶课程 / 类插图1
习题2

注意:

所有的方法必须有 self 作为他们的第一个参数,默认就填写self


尝试访问未定义实例的属性会导致 AttributeError。这也适用于你调用未定义的方法。

例如:

class Rectangle: 
  def __init__(self, width, height):
    self.width = width
    self.height = height

rect = Rectangle(7, 8)
print(rect.color)

结果:

AttributeError: 'Rectangle' object has no attribute 'color'

版权声明:
作者:RHZ
链接:https://www.rhzhz.cn/?p=63
来源:RHZ | 用文字记录工作和学习生活
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
Python3 进阶课程 / 类
我们先前看过两种编程模式 - 命令式(使用语句,循环和函数)和 函数式(使用纯函数,高阶函数和递归)。 另一个非常流行的范例是面向对象编程……
<<上一篇
下一篇>>