亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python 对象和类

Python 对象和类

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

视频:Python 类和对象

Python 对象和类

Python 是一种面向对象的编程语言。与面向过程的编程主要强调函数不同,面向对象的编程强调对象。

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

我们可以把一个类想象成一个房子的草图(原型)。它包含有关地板、门、窗等的所有细节。根据这些描述,我们建造了房子。房子是对象。

由于可以从房屋的蓝图制作许多房屋,因此我们可以从一个类中创建许多对象。对象也称为类的实例,创建此对象的过程称为实例化 .


在 Python 中定义一个类

就像 Python 中函数定义以 def 关键字开头一样,类定义以 class 关键字开头。

类中的第一个字符串称为 docstring,并具有该类的简要描述。虽然不是强制性的,但强烈建议这样做。

这是一个简单的类定义。

class MyNewClass:
    '''This is a docstring. I have created a new class'''
    pass

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

其中还有以双下划线__开头的特殊属性 .例如,__doc__ 给我们那个类的文档字符串。

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

class Person:
    "This is a person class"
    age = 10

    def greet(self):
        print('Hello')


# Output: 10
print(Person.age)

# Output: <function Person.greet>
print(Person.greet)

# Output: "This is a person class"
print(Person.__doc__)

输出

10
<function Person.greet at 0x7fc78c6e8160>
This is a person class

在 Python 中创建对象

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

它还可用于创建该类的新对象实例(实例化)。创建对象的过程类似于函数调用。

>>> harry = Person()

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

属性可以是数据或方法。对象的方法是该类的对应函数。

这意味着,由于 Person.greet 是一个函数对象(类的属性),Person.greet 将是一个方法对象。

class Person:
    "This is a person class"
    age = 10

    def greet(self):
        print('Hello')


# create a new object of Person class
harry = Person()

# Output: <function Person.greet>
print(Person.greet)

# Output: <bound method Person.greet of <__main__.Person object>>
print(harry.greet)

# Calling object's greet() method
# Output: Hello
harry.greet()

输出

<function Person.greet at 0x7fd288e4e160>
<bound method Person.greet of <__main__.Person object at 0x7fd288e9fa30>>
Hello

您可能已经注意到 self 类内部函数定义中的参数,但我们将方法简单地称为 harry.greet() 没有任何论据。它仍然有效。

这是因为,每当一个对象调用它的方法时,对象本身就会作为第一个参数传递。所以,harry.greet() 翻译成 Person.greet(harry) .

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

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

现在你必须熟悉类对象、实例对象、函数对象、方法对象及其区别。


Python 中的构造函数

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

一个特别感兴趣的是 __init__() 功能。每当实例化该类的新对象时,都会调用此特殊函数。

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

class ComplexNumber:
    def __init__(self, r=0, i=0):
        self.real = r
        self.imag = i

    def get_data(self):
        print(f'{self.real}+{self.imag}j')


# Create a new ComplexNumber object
num1 = ComplexNumber(2, 3)

# Call get_data() method
# Output: 2+3j
num1.get_data()

# Create another ComplexNumber object
# and create a new attribute 'attr'
num2 = ComplexNumber(5)
num2.attr = 10

# Output: (5, 0, 10)
print((num2.real, num2.imag, num2.attr))

# but c1 object doesn't have attribute 'attr'
# AttributeError: 'ComplexNumber' object has no attribute 'attr'
print(num1.attr)

输出

2+3j
(5, 0, 10)
Traceback (most recent call last):
  File "<string>", line 27, in <module>
    print(num1.attr)
AttributeError: 'ComplexNumber' object has no attribute 'attr'

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

在上述步骤中要注意的一个有趣的事情是可以动态创建对象的属性。我们创建了一个新属性 attr 对于对象 num2 并阅读它。但这不会为对象 num1 创建该属性 .


删除属性和对象

可以使用 del 随时删除对象的任何属性 陈述。在 Python shell 上尝试以下操作以查看输出。

>>> num1 = ComplexNumber(2,3)
>>> del num1.imag
>>> num1.get_data()
Traceback (most recent call last):
...
AttributeError: 'ComplexNumber' object has no attribute 'imag'

>>> del ComplexNumber.get_data
>>> num1.get_data()
Traceback (most recent call last):
...
AttributeError: 'ComplexNumber' object has no attribute 'get_data'

我们甚至可以使用 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 中这种对未引用对象的自动销毁也称为垃圾回收。

<图>

Python

  1. C# 类和对象
  2. C#抽象类和方法
  3. C# 部分类和部分方法
  4. C# 密封类和方法
  5. C++ 类和对象
  6. C++朋友函数和朋友类
  7. Python 关键字和标识符
  8. Python 语句、缩进和注释
  9. Python 目录和文件管理
  10. Python 自定义异常
  11. Python 继承
  12. Python 中的 type() 和 isinstance() 示例