Python3 - 面向对象

本文详细介绍了Python3中的面向对象编程,包括类的定义、初始化方法`__init__`、方法、属性、类方法、静态方法、继承、魔术方法、对象生命周期以及数据隐藏。通过实例展示了如何创建类、实例化对象、使用`__init__`初始化对象、重载运算符以及定义私有属性。面向对象编程使得代码更加模块化和易于维护。
摘要由CSDN通过智能技术生成

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

另一个非常流行的范例是面向对象编程(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):
    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.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

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

尝试访问未定义实例的属性会导致 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'

继承

继承提供了一种在类之间共享功能的方法。

想象几个类,Cat,Dog,Rabbit等。虽然它们在某些方面可能有所不同(只有 Dog 可能有 bark 方法),但它们可能在其他方面相似(都具有

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G.spring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值