python的类和对象_Python 类和对象

Python 类和对象

在本文中,您将学习Python的核心功能,Python对象和类。 您将学习什么是类,如何创建它并在程序中使用它。

Python中的类和对象是什么?

Python是一种面向对象的编程语言。与面向过程的程序设计主要侧重于函数,面向对象的程序设计着重于对象。

对象只是数据(变量)和作用于这些数据的方法(函数)的集合。并且,类是对象的蓝图。

我们可以将类视为房子的草图(原型)。它包含有关地板,门,窗户等的所有详细信息。基于这些描述,我们建造了房屋。房子是对象。

由于可以通过描述来制作许多房屋,因此我们可以根据类创建许多对象。对象也称为类的示例,创建该对象的过程称为示例化。

在Python中定义一个类

就像函数定义以关键字def开头一样,在Python中,我们使用关键字class定义了一个类。

第一个字符串称为docstring,并具有有关该类的简短说明。尽管不是强制性的,但是建议这样做。

这是一个简单的类定义。class MyNewClass:

'''这是一个文档字符串。我已经创建了一个新类'''

pass

一个类创建一个新的本地命名空间,并在其中定义其所有属性。属性可以是数据或函数。

其中还有一些特殊属性,它们以双下划线(__)开头。例如,__doc__给我们该类的文档字符串。

一旦定义了一个类,就会创建一个具有相同名称的新类对象。这个类对象使我们可以访问不同的属性以及示例化该类的新对象。

示例class MyClass:

"这是我的第二个类"

a = 10

def func(self):

print('Hello')

# 输出: 10

print(MyClass.a)

# 输出:

print(MyClass.func)

# 输出: '这是我的第二个类'

print(MyClass.__doc__)

运行该程序时,输出为:10

这是我的第二个类

用Python创建对象

我们看到了类对象可用于访问不同的属性。

它也可以用于创建该类的新对象示例(示例化)。创建对象的过程类似于函数调用。>>> ob = MyClass()

这将创建一个新的示例对象ob。我们可以使用对象名称前缀来访问对象的属性。

属性可以是数据或方法。对象的方法是该类的相应函数。任何作为类属性的函数对象都为该类的对象定义了一种方法。

这意味着,由于MyClass.func是函数对象(类的属性),因此ob.func将成为方法对象。

示例class MyClass:

"这是我的第二个类"

a = 10

def func(self):

print('Hello')

# 创建一个新的MyClass

ob = MyClass()

# 输出:

print(MyClass.func)

# 输出: >

print(ob.func)

# Calling function func()

# 输出: Hello

ob.func()

您可能已经注意到了类内部函数定义中的self参数,但是,我们只是将该方法简称为ob.func(),没有任何参数。它仍然有效。

这是因为,只要对象调用其方法,该对象本身就会作为第一个参数传递。因此,ob.func()自动转成MyClass.func(ob)。

通常,调用带有n个参数列表的方法等效于调用带有参数列表的函数,该参数列表是通过在第一个参数之前插入方法的对象而创建的。

由于这些原因,类中函数的第一个参数必须是对象本身。这通常称为self。可以使用其他名称,但我们强烈建议您遵循约定。

现在,您必须熟悉类对象,示例对象,函数对象,方法对象及其区别。

Python中的构造函数

以双下划线(__)开头的类函数被称为特殊函数,因为它们具有特殊含义。

__init__()函数特别有用。每当示例化该类的新对象时,都会调用此特殊函数。

这种类型的函数在面向对象编程(OOP)中也称为构造函数。我们通常使用它来初始化所有变量。

示例class ComplexNumber:

def __init__(self,r = 0,i = 0):

self.real = r

self.imag = i

def getData(self):

print("{0}+{1}j".format(self.real,self.imag))

# 创建一个新的ComplexNumber对象

c1 = ComplexNumber(2,3)

# 调用getData()函数

# 输出: 2+3j

c1.getData()

# 创建另一个ComplexNumber对象

# 并创建一个新的属性“attr”

c2 = ComplexNumber(5)

c2.attr = 10

# 输出: (5, 0, 10)

print((c2.real, c2.imag, c2.attr))

# 但c1对象没有属性" attr "

# AttributeError: 'ComplexNumber'对象没有属性'attr'

c1.attr

在上面的示例中,我们定义了一个新类来表示复数。它具有两个函数,以 __init__() 初始化变量(默认为零),getData()用来正确显示数字。

在上述步骤中需要注意的一件有趣的事情是,可以动态地创建对象的属性。我们为对象c2创建了一个新的属性attr,并读取它。但这并没有为对象c1创建该属性。

删除属性和对象

可以使用del语句随时删除对象的任何属性。在Python Shell上尝试以下操作以查看输出。>>> c1 = ComplexNumber(2,3)

>>> del c1.imag

>>> c1.getData()

Traceback (most recent call last):

...

AttributeError: 'ComplexNumber' object has no attribute 'imag'

>>> del ComplexNumber.getData

>>> c1.getData()

Traceback (most recent call last):

...

AttributeError: 'ComplexNumber' object has no attribute 'getData'

我们甚至可以使用del语句删除对象本身。>>> c1 = ComplexNumber(1,3)

>>> del c1

>>> c1

Traceback (most recent call last):

...

NameError: name 'c1' is not defined

实际上,它比这更复杂。完成后,将在内存中创建一个新的示例对象 c1 = ComplexNumber(1,3),名称c1与 其绑定。

命令del c1,将删除此绑定,并从相应的名称空间中删除名称c1。但是,该对象继续存在于内存中,如果没有其他名称绑定,则该对象以后会自动销毁。

在Python中这种对未引用对象的自动销毁也称为垃圾回收。

objectReference.jpg

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值