Hướng dẫn for attribute in object python - cho thuộc tính trong đối tượng python

Thuộc tính lớp và đối tượng là gì? Có gì khác biệt? Tại sao?

Trước khi so sánh và ví dụ về các thuộc tính lớp và đối tượng, trước tiên hãy xác định chúng -

  • Một thuộc tính lớp là một biến thuộc về một lớp nhất định chứ không phải là một đối tượng cụ thể. Mỗi phiên bản của lớp này chia sẻ cùng một biến. Các thuộc tính này thường được xác định bên ngoài hàm tạo __init__.class attribute is a variable that belongs to a certain class, and not a particular object. Every instance of this class shares the same variable. These attributes are usually defined outside the __init__ constructor.
  • Thuộc tính thể hiện/đối tượng là một biến thuộc về một đối tượng [và chỉ một] đối tượng. Mỗi phiên bản của một lớp trỏ đến các biến thuộc tính của chính nó. Các thuộc tính này được xác định trong hàm tạo __init__.instance/object attribute is a variable that belongs to one [and only one] object. Every instance of a class points to its own attributes variables. These attributes are defined within the __init__ constructor.

Tại sao mặc dù?

Tại sao người ta cần sử dụng các thuộc tính lớp và thuộc tính đối tượng?

Trong một thế giới song song chỉ có những con chó, mỗi con chó có một cái tên và một độ tuổi. Tổng số con chó phải được cập nhật mọi lúc. Tất cả điều này phải được xác định trong một lớp! Điều này có thể trông giống như thế này:

class Dog:
dogs_count = 0
def __init__[self, name, age]:
self.name = name
self.age = age
print["Welcome to this world {}!".format[self.name]]
Dog.dogs_count += 1
def __del__[self]:
print["Goodbye {} :[".format[self.name]]
Dog.dogs_count -= 1

Trong lớp này, chúng tôi có một thuộc tính lớp dogs_count. Biến này theo dõi số lượng chó chúng ta có trong thế giới chó của chúng ta. Chúng tôi có hai thuộc tính thể hiện, nameage. Các biến này là duy nhất cho mỗi con chó [thuộc tính của mọi trường hợp có các vị trí bộ nhớ khác nhau]. Mỗi khi chức năng __init__ được thực thi, dogs_count tăng lên. Tương tự như vậy - mỗi khi một con chó chết [không may là những con chó không sống mãi mãi trong thế giới này], gọi phương pháp

a = Dog["Max", 1]
print["Number of dogs: {}".format[Dog.dogs_count]]
b = Dog["Charlie", 7]
del a
c = Dog["Spot", 4.5]
print["Number of dogs: {}".format[Dog.dogs_count]]
del b
del c
print["Number of dogs: {}".format[Dog.dogs_count]]
Output:
Welcome to this world Max!
Number of dogs: 1
Welcome to this world Charlie!
Goodbye Max :[
Welcome to this world Spot!
Number of dogs: 2
Goodbye Charlie :[
Goodbye Spot :[
Number of dogs: 0
2, dogs_count giảm.

a = Dog["Max", 1]
print["Number of dogs: {}".format[Dog.dogs_count]]
b = Dog["Charlie", 7]
del a
c = Dog["Spot", 4.5]
print["Number of dogs: {}".format[Dog.dogs_count]]
del b
del c
print["Number of dogs: {}".format[Dog.dogs_count]]
Output:
Welcome to this world Max!
Number of dogs: 1
Welcome to this world Charlie!
Goodbye Max :[
Welcome to this world Spot!
Number of dogs: 2
Goodbye Charlie :[
Goodbye Spot :[
Number of dogs: 0

Ah ha! Chúng tôi đã quản lý để gán các biến duy nhất cho một đối tượng trong khi có một biến được chia sẻ mà tất cả các đối tượng chứa.

Kế thừa của các thuộc tính

Trước khi mở chủ đề này, hãy để Lừa xem thuộc tính

a = Dog["Max", 1]
print["Number of dogs: {}".format[Dog.dogs_count]]
b = Dog["Charlie", 7]
del a
c = Dog["Spot", 4.5]
print["Number of dogs: {}".format[Dog.dogs_count]]
del b
del c
print["Number of dogs: {}".format[Dog.dogs_count]]
Output:
Welcome to this world Max!
Number of dogs: 1
Welcome to this world Charlie!
Goodbye Max :[
Welcome to this world Spot!
Number of dogs: 2
Goodbye Charlie :[
Goodbye Spot :[
Number of dogs: 0
4 tích hợp.

class Example:
classAttr = 0
def __init__[self, instanceAttr]:
self.instanceAttr = instanceAttr
a = Example[1]
print[a.__dict__]
print[Example.__dict__]
Output:
{'instanceAttr': 1}
{'__module__': '__main__', '__doc__': None, '__dict__': , '__init__': , 'classAttr': 0, '__weakref__': }

Như chúng ta có thể thấy, cả lớp và đối tượng đều có từ điển với các khóa và giá trị thuộc tính. Từ điển lớp lưu trữ nhiều thuộc tính tích hợp mà một thể hiện không chứa.

b = Example[2]
print[b.classAttr]
print[Example.classAttr]
b.classAttr = 653
print[b.classAttr]
print[Example.classAttr]
Output:
0
0
653
0

Woah. Mang lại những gì tôi đã viết trước đó, mỗi trường hợp của một lớp chia sẻ cùng một thuộc tính lớp. Chuyện gì đã xảy ra ở đây? Chúng tôi đã thay đổi thuộc tính lớp của một trường hợp nhất định, nhưng biến được chia sẻ thực sự thay đổi. Nhìn vào từ điển của các yếu tố này sẽ cung cấp thêm cái nhìn sâu sắc:Bringing back what I wrote earlier, each instance of a class shares the same class attributes. What happened here? We changed the class attribute of a certain instance, but the shared variable didn’t actually change. Taking a look at the dictionaries of these elements will give further insight:

b = Example[2]
print[b.__dict__]
print[Example.__dict__]
b.classAttr = 653
print[b.__dict__]
print[Example.__dict__]
Output:
{'instanceAttr': 2}
'__module__': '__main__', '__doc__': None, '__dict__': , '__init__': , 'classAttr': 0, '__weakref__': }
{'instanceAttr': 2, 'classAttr': 653}
{'__module__': '__main__', '__doc__': None, '__dict__': , '__init__': , 'classAttr': 0, '__weakref__': }

Nhìn kỹ, chúng tôi nhận thấy rằng

a = Dog["Max", 1]
print["Number of dogs: {}".format[Dog.dogs_count]]
b = Dog["Charlie", 7]
del a
c = Dog["Spot", 4.5]
print["Number of dogs: {}".format[Dog.dogs_count]]
del b
del c
print["Number of dogs: {}".format[Dog.dogs_count]]
Output:
Welcome to this world Max!
Number of dogs: 1
Welcome to this world Charlie!
Goodbye Max :[
Welcome to this world Spot!
Number of dogs: 2
Goodbye Charlie :[
Goodbye Spot :[
Number of dogs: 0
5 đã được thêm vào từ điển của đối tượng, với giá trị sửa đổi của nó. Từ điển lớp học vẫn giữ nguyên, điều này cho thấy các thuộc tính lớp có thể hoạt động như các thuộc tính thể hiện đôi khi.

Sự kết luận

Tóm lại, các thuộc tính lớp và đối tượng cực kỳ hữu ích nhưng có thể trở nên lộn xộn khi được sử dụng cùng nhau. Các thuộc tính lớp thuận lợi khi mỗi đối tượng cần chia sẻ một biến, chẳng hạn như bộ đếm. Các thuộc tính đối tượng có lợi thế khi mỗi đối tượng duy nhất cần các giá trị riêng của nó, một cái gì đó làm cho chúng khác với các đối tượng khác.

Một thuộc tính có thể là một python đối tượng?

Thuộc tính thể hiện/đối tượng là một biến thuộc về một đối tượng [và chỉ một] đối tượng. Mỗi phiên bản của một lớp trỏ đến các biến thuộc tính của chính nó. Các thuộc tính này được xác định trong hàm tạo __init__.. Every instance of a class points to its own attributes variables. These attributes are defined within the __init__ constructor.

Làm thế nào để tôi tìm thấy các thuộc tính của một đối tượng trong Python?

Các thuộc tính của một lớp cũng có thể được truy cập bằng các phương thức và hàm tích hợp sau: getattr []-hàm này được sử dụng để truy cập thuộc tính của đối tượng.HasAttr [] - Hàm này được sử dụng để kiểm tra xem thuộc tính có tồn tại hay không.setAttr [] - Hàm này được sử dụng để đặt thuộc tính.getattr[] – This function is used to access the attribute of object. hasattr[] – This function is used to check if an attribute exist or not. setattr[] – This function is used to set an attribute.

Làm thế nào để bạn kiểm tra xem một đối tượng có thuộc tính cụ thể?

Nếu bạn muốn xác định xem một đối tượng nhất định có thuộc tính cụ thể thì phương thức HasAttr [] có phải là những gì bạn đang tìm kiếm hay không.Phương thức chấp nhận hai đối số, đối tượng và thuộc tính ở định dạng chuỗi.hasattr[] method is what you are looking for. The method accepts two arguments, the object and the attribute in string format.

__ getattr __ trong Python là gì?

__GetAttr__ đối tượng.__getAttr __ [tự, tên] là một phương thức đối tượng được gọi là nếu không tìm thấy thuộc tính của đối tượng.Phương thức này sẽ trả về giá trị thuộc tính hoặc ném thuộc tính.Lưu ý rằng nếu thuộc tính đối tượng có thể được tìm thấy thông qua cơ chế bình thường, nó sẽ không được gọi.__GetAttr__ Phương thức.an object method that is called if the object's properties are not found. This method should return the property value or throw AttributeError . Note that if the object property can be found through the normal mechanism, it will not be called. __getattr__ method.

Bài Viết Liên Quan

Chủ Đề