Python中的Static
静态变量和静态方法是各种语言(如 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 是一个类变量,定义在类方法之外,类定义之内。而 name 和 id 是在方法内部定义的实例变量。
使用相同的类对象访问静态变量
我们可以使用相同的类对象和点运算符直接访问Python中的静态变量。
让我们考虑一个程序,使用相同的类对象在Python中访问静态变量。
staticVar.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具有属于类的 静态方法 。它类似于绑定到类而不是类对象的静态变量。可以在不创建类对象的情况下调用静态方法。这意味着我们可以直接使用类名的引用调用静态方法。此外,静态方法受类的限制;因此它不能改变对象的状态。
静态方法的特点
以下是静态方法的特点:
- Python中的静态方法与类相关。
- 它可以通过类名引用直接从类调用。
- 它无法访问Python程序中的类属性。
- 它仅绑定到类。因此它无法修改对象的状态。
- 它还用于为类分割实用方法。
- 它只能在类中定义,而不能在类的对象中定义。
- 类的所有对象只共享一个静态方法副本。
有两种方法可以在Python中定义静态方法:
- 使用staticmethod()方法
- 使用@staticmethod装饰器
使用staticmethod()方法
staticmethod() 是Python中的内置函数,用于将给定函数作为静态方法返回。
语法:
staticmethod (function)
A staticmethod ()接受一个参数。传递的参数是需要转换为静态方法的函数。
让我们考虑一个使用Python中的staticmethod()创建函数作为静态方法的程序。
staticMethod.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方法作为静态方法。之后,我们可以使用类名Marks直接调用静态方法。
使用@staticmethod装饰器
@staticmethod是一个内置的装饰器,用于在类内部定义静态方法。它不接收任何参数作为类实例的引用或调用静态方法的类本身。
语法:
class Abc:
@staticmethod
def function_name (arg1, arg2, ?):
# Statement to be executed
Returns: a static method for function function_name
注意:@staticmethod是定义静态方法的现代方法,大多数程序员在Python编程中使用这种方法。
让我们创建一个程序,使用@staticmethod装饰器来定义静态方法。
staticFun.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
使用相同的类对象访问静态方法
考虑一个使用@staticmethod在Python中访问类的静态方法的程序。
Test.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.