我们先前看过两种编程模式 - 命令式(使用语句,循环和函数)和 函数式(使用纯函数,高阶函数和递归)。
另一个非常流行的范例是面向对象编程(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__ 方法被称为类构造函数。

方法
类可以定义方法来为其添加功能。
请记住,所有的方法必须有 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
类属性由类的所有实例共享。

注意:
所有的方法必须有 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'
文章评论