Trong hướng dẫn này, bạn sẽ tìm hiểu về hàm setattr[] trong Python, bao gồm chức năng của nó, khi nào nên sử dụng và khi nào sử dụng nó là thừa. Hàm được sử dụng để đặt một thuộc tính thành một giá trị của một đối tượng, cho dù thuộc tính đó có tồn tại hay không
Đến cuối hướng dẫn này, bạn sẽ học được
- Hàm Python
0 làm gì và cách sử dụng nó# Setting the attribute of an object class Employee: def __init__[self, name, salary]: self.name = name self.salary = salary Nik = Employee["Nik", 75000] print['Before changing attribute...'] print['Nik.salary:', Nik.salary] setattr[Nik, "salary", 80000] print['After changing attribute...'] print['Nik.salary:', Nik.salary] # Returns: # Before changing attribute... # Nik.salary: 75000 # After changing attribute... # Nik.salary: 80000
- Khi chức năng bị lỗi và cách ngăn chặn lỗi này
- Tại sao chức năng có thể dư thừa để đặt thuộc tính
- Cách chức năng có thể được sử dụng để thêm tập hợp nhiều thuộc tính đối tượng cùng một lúc
Mục lục
- Hiểu hàm setattr trong Python
- Tại sao Python setattr có thể dư thừa
- Cách đặt nhiều thuộc tính đối tượng trong Python với setattr
- Khi setattr thất bại và cách khắc phục lỗi
- Sự kết luận
- Tài nguyên bổ sung
Hiểu hàm setattr trong Python
Hàm setattr trong Python được sử dụng để đặt giá trị cho một thuộc tính của một đối tượng. Chức năng này có thể được sử dụng để
- Đặt thuộc tính của một thuộc tính hiện có, hoặc
- Tạo một thuộc tính mới và đặt nó thành một giá trị được cung cấp
Hãy xem chức năng này trông như thế nào
# Understanding the Python setattr[] Function
setattr[
object, # The object to set the attribute on
name, # The name of the attribute
value # The value of the attribute
]
Chúng ta có thể thấy rằng hàm có ba tham số. bản thân đối tượng, tên của thuộc tính và giá trị được đặt
Sử dụng setattr để đặt thuộc tính tồn tại
Hãy xem cách chúng ta có thể sử dụng hàm để đặt giá trị của thuộc tính
# Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
Hãy chia nhỏ đoạn mã trên làm gì
- Đầu tiên chúng ta tạo một lớp,
1, lớp này có hai thuộc tính,# Setting the attribute of an object class Employee: def __init__[self, name, salary]: self.name = name self.salary = salary Nik = Employee["Nik", 75000] print['Before changing attribute...'] print['Nik.salary:', Nik.salary] setattr[Nik, "salary", 80000] print['After changing attribute...'] print['Nik.salary:', Nik.salary] # Returns: # Before changing attribute... # Nik.salary: 75000 # After changing attribute... # Nik.salary: 80000
2 và# Setting the attribute of an object class Employee: def __init__[self, name, salary]: self.name = name self.salary = salary Nik = Employee["Nik", 75000] print['Before changing attribute...'] print['Nik.salary:', Nik.salary] setattr[Nik, "salary", 80000] print['After changing attribute...'] print['Nik.salary:', Nik.salary] # Returns: # Before changing attribute... # Nik.salary: 75000 # After changing attribute... # Nik.salary: 80000
0# Setting the attribute of an object class Employee: def __init__[self, name, salary]: self.name = name self.salary = salary Nik = Employee["Nik", 75000] print['Before changing attribute...'] print['Nik.salary:', Nik.salary] setattr[Nik, "salary", 80000] print['After changing attribute...'] print['Nik.salary:', Nik.salary] # Returns: # Before changing attribute... # Nik.salary: 75000 # After changing attribute... # Nik.salary: 80000
- Sau đó, chúng tôi khởi tạo một đối tượng Nhân viên mới và đặt hai thuộc tính ban đầu
- Sau đó, sử dụng hàm
0 để sửa đổi thuộc tính# Setting the attribute of an object class Employee: def __init__[self, name, salary]: self.name = name self.salary = salary Nik = Employee["Nik", 75000] print['Before changing attribute...'] print['Nik.salary:', Nik.salary] setattr[Nik, "salary", 80000] print['After changing attribute...'] print['Nik.salary:', Nik.salary] # Returns: # Before changing attribute... # Nik.salary: 75000 # After changing attribute... # Nik.salary: 80000
0# Setting the attribute of an object class Employee: def __init__[self, name, salary]: self.name = name self.salary = salary Nik = Employee["Nik", 75000] print['Before changing attribute...'] print['Nik.salary:', Nik.salary] setattr[Nik, "salary", 80000] print['After changing attribute...'] print['Nik.salary:', Nik.salary] # Returns: # Before changing attribute... # Nik.salary: 75000 # After changing attribute... # Nik.salary: 80000
Sử dụng setattr để đặt thuộc tính không tồn tại
Trong ví dụ trên, chúng tôi đã sử dụng hàm
# Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
0 để sửa đổi giá trị của một thuộc tính đã tồn tại. Tuy nhiên, chúng ta cũng có thể sử dụng nó để đặt một thuộc tính chưa tồn tại. Hãy thêm một thuộc tính bằng hàm # Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
0 vào cùng một lớp# Setting the attribute of an object when the attribute doesn't exist
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
setattr[Nik, "location", "Toronto"]
print['Nik.location:', Nik.location]
# Returns:
# Nik.location: Toronto
Chúng ta có thể thấy rằng chức năng hoạt động trong việc thiết lập giá trị của thuộc tính, ngay cả khi thuộc tính đó không tồn tại trước đó
Tại sao Python setattr có thể dư thừa
Hàm Python
# Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
0 hoạt động trong việc thiết lập các thuộc tính trong các đối tượng Python. Tuy nhiên, nó cũng có thể dư thừa vì có nhiều cách đơn giản hơn và có thể nói là nhiều cách Pythonic hơn để hoàn thành điều tương tự. Chúng ta có thể sử dụng ký hiệu dấu chấm để làm điều nàyHãy tạo lại ví dụ trên bằng ký hiệu dấu chấm
# Using other methods to set attributes
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
Nik.salary = 80000
Nik.location = 'Toronto'
print["Nik.salary:", Nik.salary]
print["Nik.location:", Nik.location]
Chúng ta có thể thấy rằng cả hai phương pháp này đều hoạt động để thiết lập các thuộc tính một cách dễ dàng. Tuy nhiên, có một số đặc quyền khi sử dụng hàm
# Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
0 – hãy đọc tiếp để tìm hiểu thêmCách đặt nhiều thuộc tính đối tượng trong Python với setattr
Một trong những lợi ích của việc sử dụng hàm
# Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
0 là có thể đặt nhiều thuộc tính cùng một lúc. Hãy tưởng tượng rằng bạn được cung cấp một từ điển các thuộc tính thuộc về một đối tượng. Bạn có thể lặp lại những điều này và đặt chúng cho các thuộc tính khác nhau của một đối tượngHãy xem nó trông như thế nào
# Setting multiple attributes with Python setattr[]
class Employee:
def __init__[self, name]:
self.name = name
Nik = Employee["Nik"]
attributes = {
'Age': 33,
'Location': 'Toronto',
'Salary': 75000
}
for attribute, value in attributes.items[]:
setattr[Nik, attribute, value]
print[vars[Nik]]
# Returns: {'name': 'Nik', 'Age': 33, 'Location': 'Toronto', 'Salary': 75000}
Trong ví dụ trên, chúng tôi lặp lại từng khóa và giá trị trong từ điển. Sau đó, chúng tôi sử dụng hàm
# Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
0 để thêm các thuộc tính và giá trị này. Cuối cùng, chúng tôi sử dụng hàm # Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
9 để in ra một từ điển chứa các thuộc tính của đối tượngKhi setattr thất bại và cách khắc phục lỗi
Hàm Python
# Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
0 sẽ không thành công nếu nó được sử dụng trên các đối tượng chưa tồn tại. Điều này có nghĩa là trước tiên một đối tượng cần được khởi tạo để ngăn ngừa bất kỳ lỗi nào. Do đó, hàm không thể được sử dụng để khởi tạo một đối tượng mà chỉ hoạt động với những đối tượng đã tồn tại________số 8Để giải quyết vấn đề này, trước tiên chúng ta cần tạo đối tượng
# Resolving the NameError Raised by setattr[]
class Employee:
def __init__[self, name]:
self.name = name
Nik = Employee["Nik"]
setattr[Nik, "age", 30]
Sự kết luận
Trong hướng dẫn này, bạn đã học cách sử dụng hàm Python
# Setting the attribute of an object
class Employee:
def __init__[self, name, salary]:
self.name = name
self.salary = salary
Nik = Employee["Nik", 75000]
print['Before changing attribute...']
print['Nik.salary:', Nik.salary]
setattr[Nik, "salary", 80000]
print['After changing attribute...']
print['Nik.salary:', Nik.salary]
# Returns:
# Before changing attribute...
# Nik.salary: 75000
# After changing attribute...
# Nik.salary: 80000
0 để đặt thuộc tính của một đối tượng thành một giá trị. Trước tiên, bạn đã học cách xác định chức năng và cách sử dụng nó cho cả thuộc tính đã tồn tại và cho thuộc tính chưa tồn tại. Sau đó, bạn đã biết lý do tại sao hàm có thể dư thừa vì bạn chỉ cần sử dụng ký hiệu dấu chấmSau đó, bạn đã học cách sử dụng hàm để đặt nhiều thuộc tính bằng vòng lặp for cũng như cách khắc phục các lỗi có thể xảy ra khi sử dụng hàm