Python 类

Python 是一种面向对象的编程语言 (OOPS)。这意味着 Python 中的一切都是某个类的对象或实例。简单来说,类是对象的蓝图。或者说,类是初始化变量、定义方法、静态方法等的组合。

本节将解释如何在 Python 面向对象编程中创建类、创建对象或实例属性、修改对象以及删除对象或实例,并提供示例。

在 Python 中创建空类

您必须使用 pass 关键字来创建不执行任何操作或创建空类。

class Employee:
    pass

以下示例展示了如何在类中声明变量和创建方法。方法有不同的种类,我们将在后面的章节中讨论。现在,请理解带有方法的类语法。

class Employee:
    Variable = Value
 

    def function_name(self):
        Statements 
    …………..

Python 类对象

类对象支持属性引用和实例化。您可以使用其中任何一个来调用类属性。这是一个实例化和属性引用的示例。

  • 属性引用使用 CLName.Variable_name 或 CLName.function_name。
  • 对于实例化,您必须创建该类的一个实例或副本。要创建新实例,请使用 instance_name = CLName(),要调用变量,请使用 instance_name.variable_name,要调用方法,请使用 instance_name.method_name()

这里,emp = Employee() 正在创建一个实例化,print 中的 emp.company 意味着调用类变量。接下来,Employee.company 是一个属性引用的示例。

class Employee:
    company = 'Tutorial Gateway'
 
emp = Employee()
print(emp.company)
 
print("-------------")
print(Employee.company)
Tutorial Gateway
-------------
Tutorial Gateway

在这个 Python 类示例中,我们声明了一个变量 company 并定义了一个带有 self 参数的函数,该函数打印一条欢迎消息。接下来,我们为 Employee 创建了一个对象 emp1。通过使用这个对象 emp1,我们正在访问 company 变量和 func_message()。

最后两个语句使用属性引用来访问变量值和函数结果。因此,通过使用属性引用,您可以打印变量值。但是,Employee.func_message 返回函数对象而不是实际的函数结果。因此,在使用属性引用时,您应该记住这个概念。

class Employee:
    company = 'Tutorial Gateway'
 
    def func_message(self):
        print('Welcome to Programming')
 
emp = Employee()
print(emp.company)
emp.func_message()
 
print("-------------")
print(Employee.company)
print(Employee.func_message)
Tutorial Gateway
Welcome to Programming
-------------
Tutorial Gateway
<function Employee.func_message at 0x7f831ddd8d30>

Python __init() 函数

默认情况下,所有实时 Python 类都具有 __init__() 函数。使用此函数为对象的属性赋值。当您创建对象时,它会自动调用 __init__() 函数。您无需手动调用它。

在这个类示例中,我们在 __init__() 函数中使用了简单的 print 语句。接下来,我们创建了一个 Employee 对象。正如您所看到的,它直接打印消息。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self):
        print('Hello World')
 
    def func_message(self):
        print('Welcome to Python Programming')
 
emp1 = Employee() # Created an Instance
 
print(emp1.company)
emp1.func_message()
Create a Class in Python Programming Language

这里,我们使用 __init__() 函数为类属性添加值。这里,我们使用了函数的名称、年龄和性别,并在下一行中分配了这些值。这意味着当您创建员工对象时,您必须提供名称、年龄和性别(在创建对象本身时)。

例如,如果您创建对象 emp1 = Employee() 而不带参数值,则会引发以下错误。TypeError: __init__() 缺少 3 个必需的位置参数:'name'、'age' 和 'gender'

class Employee:
    company = 'Tutorial Gateway'
 
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print('Welcome to Programming')
 
emp1 = Employee('Jack', 25, 'Male') 

print(emp1.company)
emp1.func_message()
print(emp1.name)
print(emp1.age)
print(emp1.gender)

init 输出

Tutorial Gateway
Welcome to Programming
Jack
25
Male

从上面的 Python 类 _init 示例中,声明参数可能会让您感到困惑,因为我们总是使用相同的名称:name、age 和 gender。然而,这不是强制性的,但这样做是最佳实践。

在此示例中,我们使用 n、a、gen 作为 __init__ 参数,并使用 name、age 和 gender 作为类的自初始化。希望这可以消除您的困惑。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self, n, a, gen):
        self.name = n
        self.age = a
        self.gender = gen

    def func_message(self):
        print('Welcome to Programming')

emp1 = Employee('Johnson', 29, 'Male')
 
print(emp1.company)
emp1.func_message()
print(emp1.name)
print(emp1.age)
print(emp1.gender)

init 输出

Tutorial Gateway
Welcome to Programming
Johnson
29
Male

Python 中的多个类对象

当您创建一个类的对象或实例时,它会持有该对象或实例的副本,而不是实际的对象或实例。这意味着您可以从单个对象创建 n 个对象,并且每个实例可能具有不同的属性值或方法值。

在此示例中,我们创建了一个 Employee。接下来,我们从该员工创建了两个对象,emp1 和 emp2。正如您所看到的,每个实例都有不同的姓名、年龄和性别。接下来,我们将这些值作为输出打印出来,您可以看到它们有效!

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print('Welcome to this World')
 
emp1 = Employee('Mike', 25, 'Male')
print(emp1.company)
emp1.func_message()
print(emp1.name)
print(emp1.age)
print(emp1.gender)
 
print()
emp2 = Employee('Tracy', 27, 'Female')
print(emp2.company)
emp2.func_message()
print(emp2.name)
print(emp2.age)
print(emp2.gender)
Tutorial Gateway
Welcome to this World
Mike
25
Male

Tutorial Gateway
Welcome to this World
Tracy
27
Female

这个类示例与上面相同。但是,这次我们修改了 func_message(self) 函数定义。它接受名称(实例变量)并将其附加到我们作为输出打印的消息中。让我从 emp1 和 emp2 这两个实例中调用此消息。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Programming')
 
emp1 = Employee('Mike', 25, 'Male')
print(emp1.company)
print(emp1.name) # Mike
print(emp1.age) #25
print(emp1.gender)
emp1.func_message()
 
print()
emp2 = Employee('Tracy', 27, 'Female')
print(emp2.company)
print(emp2.name) #Tracy
print(emp2.age) # 27
print(emp2.gender)
emp2.func_message()

正如您所看到的,emp1.func_message() 将 self.name 替换为 Mike,而 emp2.func_message() 将 self.name 替换为 Tracy。

Tutorial Gateway
Mike
25
Male
Mike is learning Programming

Tutorial Gateway
Tracy
27
Female
Tracy is learning Programming

修改 Python 类变量示例

让我们看看如何使用对象修改类变量。首先,我们声明了一个公司变量和一个打印欢迎消息的函数。接下来,我们创建了 Employee 的三个实例 emp1、emp2 和 emp3。

接下来,我们使用 Object_name.Variabel_name = New_Name 来更改 emp2 和 emp3 对象的公司名称。它更改了这两个实例的公司名称。接下来,我们正在打印所有这三个实例的公司变量。

class Employee:
    company = 'Tutorial Gateway'
 
    def func_message(self):
        print('Welcome to Programming')
 
emp1 = Employee()
emp2 = Employee()
emp3 = Employee()
 
emp2.company = 'Py'
emp3.company = 'Apple'
 
emp1.func_message()
 
print(emp1.company)
print(emp2.company)
print(emp3.company)
print(emp1.company)
Welcome to Programming
Tutorial Gateway
Py
Apple
Tutorial Gateway

修改 Python 类对象属性

此示例展示了如何修改对象属性。首先,我们使用所需的字段创建了 Employee 的实例 emp1。接下来,我们将可用值作为输出打印出来。

这里,emp1.name = 'John' (object_name.property_name = New_Value) 语句将现有的 emp1 名称 (Mike) 更新为 John。让我再打印一次 emp1 名称来验证。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Programs')

emp1 = Employee('Mike', 25, 'Male')
print(emp1.name)
print(emp1.age)
print(emp1.gender)
emp1.func_message()
 
emp1.name = 'John'
print(emp1.name)
emp1.func_message()

请注意,最后两个语句正在打印新名称 John。

Mike
25
Male
Mike is learning Programs
John
John is learning Programs

删除对象属性

在这个 Python 类示例中,我们展示了如何删除对象属性。这里,emp1 = Employee(‘John’, 25, ‘Male’) 为 Employee 创建了一个实例 emp1。接下来,我们正在打印 func_message() 方法中的姓名、年龄、性别和消息。

接下来,我们使用 del 关键字删除了名为 name 的 emp1 对象属性 (del instance_name.property_name)。最后,在最后一条语句中,我们再次打印了我们删除的 emp1 对象的 name 属性。

正如您所看到的,它显示了一个错误“'Employee' 对象没有属性 'name'”。这意味着我们成功删除了对象属性。同样,您可以通过 del emp1.age 删除 age,并通过 del emp1.gender 删除 gender。

class Employee:
    company = 'Tutorial Gateway'
 
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Programming')
 
emp1 = Employee('John', 25, 'Male')
print(emp1.name)
print(emp1.age)
print(emp1.gender)
emp1.func_message()
 
del emp1.name 
print(emp1.name)
John
25
Male
John is learning Programming
Traceback (most recent call last):
  File "/Users/suresh/Desktop/simple.py", line 19, in <module>
    print(emp1.name)
AttributeError: 'Employee' object has no attribute 'name'

请记住,删除实例属性不会影响其他实例属性。此 Python 类示例与上面相同。但是,这次我们为 Employee 创建了两个实例 emp1 和 emp2。接下来,我们使用 del 关键字删除了 emp1 对象的 name 属性。接下来,我们正在打印 emp2 实例和 emp1 实例的名称。

emp2.name 返回名称 Nancy,但 emp1.name 抛出错误,因为我们之前删除了它。

class Employee:
    company = 'Tutorial Gateway'
 
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Programming')
 
emp1 = Employee('John', 25, 'Male')
emp2 = Employee('Nancy', 27, 'Female')
print(emp1.name)
print(emp1.age)
print(emp1.gender)
emp1.func_message()
 
del emp1.name
print(emp2.name)
print(emp1.name)
John
25
Male
John is learning Programming
Nancy
Traceback (most recent call last):
  File "/Users/suresh/Desktop/simple.py", line 21, in <module>
    print(emp1.name)
AttributeError: 'Employee' object has no attribute 'name'

删除 Python 类和对象

在此示例中,我们使用与之前示例中定义的相同内容。在这里,我们创建了一个 Employee 对象,并显示了 func_message() 方法中的员工姓名、年龄、性别和消息。请参阅静态方法文章。

接下来,我们使用 del 关键字删除类对象 emp1 (del Object_name)。它删除了我们之前创建的实例 emp1。在最后一条语句中,我们使用 emp1 对象调用了 func_message() 方法,以检查该对象是否存在。正如您所看到的,它抛出了一个错误 'emp1' 未定义。这意味着我们通过 del 语句删除了 emp1 对象。

class Employee:
    company = 'Tutorial Gateway'
 
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Programming')
 
emp1 = Employee('John', 25, 'Male')
print(emp1.name)
print(emp1.age)
print(emp1.gender)
emp1.func_message()
 
del emp1
emp1.func_message()
John
25
Male
John is learning Programming
Traceback (most recent call last):
  File "/Users/suresh/Desktop/simple.py", line 19, in <module>
    emp1.func_message()
NameError: name 'emp1' is not defined

创建类的不同方式

在这里,我们展示了在 python 中创建类的不同方式。正如您所看到的,您可以使用 c_name Employee、c_name() 或 c_name(object)。最后一个带有 object 的选项是最新的一种。如果您仔细观察对象创建,我们会使用相同的方法来创建所有三个对象。

class Employee:
    def __init__(self):
        print('Msg from Employee : Welcome to Tutorial Gateway')
 
class Student():
    def __init__(self):
        print('Msg from Student: Hello World!')
 
class Person(object):
    def __init__(self):
        print('Msg from Person: Welcome to Programming')
         
emp = Employee()

std = Student()

per = Person()

使用 c_name 或 c_name() 输出创建

Msg from Employee : Welcome to Tutorial Gateway
Msg from Student: Hello World!
Msg from Person: Welcome to Programming

类 self 参数

self 参数只不过是对类当前实例的引用。我们必须将此 self 参数用作第一个参数,这有助于我们访问变量。

如果您不喜欢关键字 self,那么可以使用任何单词作为 self 参数。但是,它必须是第一个参数。在此示例中,我们在第三种方法中使用了 suresh 而不是 self。

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def func_message(self):
        print(self.name + ' is learning Programming')
 
    def func_msg(suresh):
        print('Tutorial Gateway Welcome ' + suresh.name)
 
emp1 = Employee('John', 25)
emp1.func_message()
emp1.func_msg()
John is learning Programming
Tutorial Gateway Welcome John