getattr

python getattr() 函数用于获取对象属性的值,如果找不到该对象的属性,则返回默认值。

原理: 基于反射

基本上,返回默认值是您可能需要使用 python getattr() 函数的主要原因。因此在开始本教程之前,让我们看看 python 的getattr() 函数的基本语法

  1. getattr(object, name[, default])
  2. Return the value of the named attribute of object. name must be a string.
  3. If the string is the name of one of the objects attributes, the result is the value of that attribute.
  4. For example, getattr(x, 'foobar') is equivalent to x.foobar.
  5. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.

在本节中,我们将学习如何使用getattr()函数访问对象的属性值。假设,我们正在编写一个名为的类Student。Student类的基本属性是student_idstudent_name。现在我们将创建Student类的对象并访问它的属性。

  1. class Student:
  2. student_id = ""
  3. studnet_name = ""
  4. def __init__(self, *args, **kwargs):
  5. self.student_id = '101'
  6. self.student_name = 'adam'
  7. return super().__init__(*args, **kwargs)
  8. student = Student()
  9. print('getattr: name of the student is =', getattr(student, 'student_name'))
  10. print('traditional: name of the studnet is =', student.student_name)
  11. '''
  12. (pythonparallel) D:\projects\pythoncode\pythonparallel>python pygetattrdemo.py
  13. getattr: name of the student is = adam
  14. traditional: name of the studnet is = adam
  15. (pythonparallel) D:\projects\pythoncode\pythonparallel>^A
  16. '''

getattr可以提供默认值作为未找到时的返回值

  1. print('Using default value: Cgpa of the student is = ',
  2. getattr(student, 'student_cgpa', 300))
  3. try:
  4. print('Without default value: Cgpa of the student is = ',
  5. getattr(student, 'student_cgpa'))
  6. except AttributeError:
  7. print('Attribute is not fount:(')
  8. '''
  9. (pythonparallel) D:\projects\pythoncode\pythonparallel>python pygetattrdemo.py
  10. Using default value: Cgpa of the student is = 300
  11. Attribute is not fount:(
  12. '''

功能

getattr 的主要原因是我们可以通过将属性的名称用途string来获取值。因此,您可以从控制台手动输入程序中的改名称。

同样,如果找不到属性,您可以设置一些默认值,这使用我们能够完成一些不完整的数据。

此外,如果您的Student类正在进行中,那么我们可以使用 getattr 函数来完成其他代码。一旦 Student 类具有此属性,它将自动获取它并且不使用默认值。

所以,这就是 python getattr 函数。

参考

https://www.journaldev.com/16146/python-getattr

https://www.journaldev.com/python-tutorial