Biến và thuộc tính trong Python là gì?

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 định nghĩa chúng -

  • 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 một đối tượng cụ thể. Mọi thể hiệ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 định nghĩa bên ngoài hàm tạo __init__
  • Thuộc tính thể hiện/đối tượng là một biến thuộc về một (và chỉ một) đối tượng. Mỗi thể hiệ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 định nghĩa trong hàm tạo __init__
Tại sao mặc dù?

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

Trong một thế giới song song chỉ toàn những chú chó, mỗi chú chó đều có tên và tuổi. Tổng số 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ó (các thuộc tính của mỗi phiên bản có các vị trí bộ nhớ khác nhau). Mỗi khi hàm __init__ được thực thi, dogs_count sẽ tăng. Tương tự như vậy — mỗi khi một con chó chết (không may là chó không sống mãi trên đời này), gọi phương thức

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, thì 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

á 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 chung mà tất cả các đối tượng chứa

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

Trước khi mở chủ đề này, chúng ta hãy xem thuộc tính tích hợp sẵn

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

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__': <attribute '__dict__' of 'Example' objects>, '__init__': <function Example.__init__ at 0x7f8af2113f28>, 'classAttr': 0, '__weakref__': <attribute '__weakref__' of 'Example' objects>}

Như chúng ta có thể thấy, cả lớp và đối tượng đều có một 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 phiên bả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

TUYỆT VỜI. Quay trở lại những gì tôi đã viết trước đó, mỗi phiên bản của một lớp chia sẻ các thuộc tính lớp giống nhau. Điều gì đã xảy ra ở đây? . Nhìn vào từ điển của các yếu tố này sẽ cung cấp cho cái nhìn sâu sắc hơn

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__': <attribute '__dict__' of 'Example' objects>, '__init__': <function Example.__init__ at 0x7f8af2113f28>, 'classAttr': 0, '__weakref__': <attribute '__weakref__' of 'Example' objects>}
{'instanceAttr': 2, 'classAttr': 653}
{'__module__': '__main__', '__doc__': None, '__dict__': <attribute '__dict__' of 'Example' objects>, '__init__': <function Example.__init__ at 0x7f8af2113f28>, 'classAttr': 0, '__weakref__': <attribute '__weakref__' of 'Example' objects>}

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ị được sửa đổi của nó. Từ điển của lớp vẫn giữ nguyên, điều này cho thấy rằng các thuộc tính của lớp đôi khi có thể hoạt động như các thuộc tính thể hiện

Phần 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. 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ó, điều gì đó khiến chúng khác biệt với các đối tượng khác

Thuộc tính và biến là gì?

Trong khoa học và nghiên cứu, thuộc tính là phẩm chất của một đối tượng (người, vật, v.v. ). Các thuộc tính có quan hệ mật thiết với các biến. Biến là một tập hợp logic các thuộc tính . Các biến có thể "thay đổi" - ví dụ: cao hoặc thấp.

Thuộc tính trong Python là gì?

Thuộc tính lớp và trường hợp trong Python . Giá trị của các thuộc tính lớp vẫn giữ nguyên cho mọi đối tượng mới. class variables that are inherited by every object of a class. The value of class attributes remain the same for every new object.

Thuộc tính và biến có giống nhau không?

Biến và thuộc tính. Trong các nghiên cứu thống kê, các biến là các giá trị hoặc tập hợp có thể định lượng thay đổi theo thời gian. Thuộc tính là đặc điểm của một thứ liên quan đến chất lượng không thể định lượng được

Biến trong Python là gì?

Biến Python là tên tượng trưng là tham chiếu hoặc con trỏ tới đối tượng . Khi một đối tượng được gán cho một biến, bạn có thể gọi đối tượng bằng tên đó. Nhưng bản thân dữ liệu vẫn được chứa trong đối tượng. Ví dụ. >>> >>> n = 300.