您的位置:

Python 中的静态

静态变量和静态方法是 C++ 、 PHP 、 Java 等多种语言中广泛使用的编程概念。这些变量和方法属于类和对象。在本节中,我们将学习如何在 Python 中创建静态变量和方法。

Python 静态变量

当我们在类内部声明一个变量,但在方法外部声明时,它被称为静态或类变量。它可以直接从类中调用,但不能通过类的实例调用。然而,静态变量与其他成员有很大不同,它与 Python 程序中的相同变量名并不冲突。

让我们考虑一个程序来演示静态变量在 Python 中的使用。

Static.py


class Employee: # create Employee class name
    dept = 'Information technology'  # define class variable
    def __init__(self, name, id):
        self.name = name       # instance variable
        self.id = id             # instance variable

# Define the objects of Employee class
emp1 = Employee('John', 'E101')        
emp2 = Employee('Marcus', 'E105')

print (emp1.dept) 
print (emp2.dept) 
print (emp1.name) 
print (emp2.name) 
print (emp1.id)  
print (emp2.id) 

# Access class variable using the class name
print (Employee.dept) # print the department

# change the department of particular instance
emp1.dept = 'Networking'
print (emp1.dept) 
print (emp2.dept) 

# change the department for all instances of the class
Employee.dept = 'Database Administration'
print (emp1.dept) 
print (emp2.dept)

输出:

Information technology
Information technology
John
Marcus
E101
E105
Information technology
Networking
Information technology
Networking
Database Administration

在上面的例子中, dept 是在类方法外部和类定义内部定义的类变量。其中名称和 id 是在方法内部定义的实例变量。

使用相同的类对象访问静态变量

我们可以使用带有点运算符的同一个类对象直接访问 Python 中的静态变量。

让我们考虑一个使用相同类对象访问 Python 中静态变量的程序。

static CVaR . py


class Car:
    # define the class variable or static variable of class Car
    num = 7
    msg = 'This is a good Car.'

# create the object of the class
obj = Car()

# Access a static variable num using the class name with a dot operator.
print ("Lucky No.", Car.num)
print (Car.msg)

输出:

Lucky No. 7
This is a good Car

静态法

Python 有一个属于类的静态方法。它就像一个静态变量,绑定到类而不是类的对象。可以在不为类创建对象的情况下调用静态方法。这意味着我们可以直接用类名的引用来调用静态方法。此外,静态方法受类的约束;因此,它不能改变对象的状态。

静态方法的特点

静态方法的特征如下:

  1. Python 中与类相关的静态方法。
  2. 它可以通过引用类名直接从类中调用。
  3. 它不能访问 Python 程序中的类属性。
  4. 它只绑定到类。所以它不能修改对象的状态
  5. 它还用于划分类的实用方法。
  6. 它只能在类内部定义,不能定义到类的对象。
  7. 该类的所有对象只共享静态方法的一个副本。

在 Python 中定义静态方法有两种方法:

  1. 使用静态方法()方法
  2. 使用@staticmethod 装饰器

使用静态方法()方法

A staticmethod ()是 Python 中的内置函数,用于将给定函数作为静态方法返回。

语法:


staticmethod (function)

A staticmethod ()取单个参数。其中传递的参数是需要转换为静态方法的函数。

让我们考虑一个程序,使用 Python 中的 static method()创建一个函数作为静态方法。

静态方法. py


class Marks:
    def Math_num(a, b): # define the static Math_num() function
        return a + b

    def Sci_num(a, b): # define the static Sci_num() function
        return a +b

    def Eng_num(a, b):  # define the static Eng_num() function
        return a +b
# create Math_num as static method
Marks.Math_num = staticmethod(Marks.Math_num)

# print the total marks in Maths
print (" Total Marks in Maths" , Marks.Math_num(64, 28)) 

# create Sci_num as static method
Marks.Sci_num = staticmethod(Marks.Sci_num)

# print the total marks in Science
print (" Total Marks in Science" , Marks.Sci_num(70, 25)) 

# create Eng_num as static method
Marks.Eng_num = staticmethod(Marks.Eng_num)

# print the total marks in English
print (" Total Marks in English" , Marks.Eng_num(65, 30))

输出:

Total Marks in Maths 92
 Total Marks in Science 95
 Total Marks in English 95

在上面的程序中,我们使用 staticmethod() 函数将 Math_num 方法、Sci_num 方法和 Eng_num 方法声明为类外的静态方法。之后,我们可以直接使用类名标记来调用静态方法。

使用@staticmethod 装饰器

@staticmethod 是一个内置的装饰器,它定义了类内部的静态方法。它不会接收任何参数作为对类实例或调用静态方法本身的类的引用。

语法:


class Abc:
@staticmethod
def function_name (arg1, arg2, ?):
# Statement to be executed
Returns: a static method for function function_name

注意:一个@staticmethod 是一种将方法定义为静态方法的现代方法,大多数程序员在 Python 编程中都使用这种方法。

让我们创建一个程序,使用 Python 中的@staticmethod 装饰器来定义静态方法。

静安定剂. py


class Marks:
    @staticmethod
    def Math_num(a, b): # define the static Math_num() function
        return a + b

    @staticmethod
    def Sci_num(a, b): # define the static Sci_num() function
        return a +b

    @staticmethod
    def Eng_num(a, b):  # define the static Eng_num() function
        return a +b

# print the total marks in Maths
print (" Total Marks in Maths" , Marks.Math_num(64, 28)) 

# print the total marks in Science
print (" Total Marks in Science" , Marks.Sci_num(70, 25))

# print the total marks in English
print (" Total Marks in English" , Marks.Eng_num(65, 30))

输出:

Total Marks in Maths 92
 Total Marks in Science 95
 Total Marks in English 95

使用相同的类对象访问静态方法

考虑一个使用 Python 中的@staticmethod 访问类的静态方法的程序。

测试 py


class Test:
    # define a static method using the @staticmethod decorator in Python.
    @staticmethod
    def beg():
        print ("Welcome to the World!! ")

# create an  object of the class Test
obj = Test()
# call the static method 
obj.beg()

输出:

Welcome to the World!!

函数使用静态方法返回值

让我们编写一个程序,使用 Python 中的@staticmethod 返回值。

Static_method.py


class Person: 
    @staticmethod
    def Age (age):
        if (age <= 18): # check whether the Person is eligible to vote or not.
            print ("The person is not eligible to vote.")
        else:
            print ("The person is eligible to vote.")

Person.Age(17) 

输出:

The person is not eligible to vote.