Các loại thuộc tính khác nhau trong Python là gì?

Trước khi tìm hiểu về thuộc tính trong Python, chúng ta phải làm quen với các khái niệm Lớp và Đối tượng trong Python, trước tiên chúng ta hãy tìm hiểu sơ qua về khái niệm lớp và đối tượng để hiểu rõ hơn về thuộc tính trong Python

Một lớp là một kiểu dữ liệu hoặc bản thiết kế hoặc nguyên mẫu do người dùng định nghĩa bằng cách sử dụng các đối tượng được tạo. Các lớp cung cấp một phương thức mà qua đó chúng ta có thể liên kết dữ liệu và các chức năng liên quan của nó với nhau. Tạo một lớp mới sẽ tạo ra một loại đối tượng mới, cho phép tạo các thể hiện mới của loại đó. Mỗi thể hiện của lớp có thể có các thuộc tính gắn liền với nó để duy trì trạng thái của nó

Thí dụ

class Student:
    name = "Sushant"
    roll = 1

Trong ví dụ trên, chúng tôi đã tạo một lớp Sinh viên và nó có một số thuộc tính (thuộc tính của lớp) cụ thể là - tên và cuộn

Một đối tượng là một thể hiện của một lớp. Nói một cách đơn giản hơn, chúng ta có thể nói rằng một đối tượng là một biến kiểu lớp. Một lớp giống như một bản thiết kế trong khi một thể hiện là một bản sao của lớp với các giá trị thực. Python là ngôn ngữ lập trình hướng đối tượng nhấn mạnh đối tượng i. e. nó chủ yếu nhấn mạnh các chức năng và phương thức. Các đối tượng là sự đóng gói các biến dữ liệu và các phương thức tác động lên dữ liệu đó thành một thực thể duy nhất

Thí dụ

class Student:
    name = "Sushant"
    roll = 1

# creating an object of Student class.
student1 = Student()
# printing property of the Student class (name)
print("The name of the student is: ", student1.name)

đầu ra

The name of the student is: Sushant

Trong ví dụ trên, chúng tôi đang in thuộc tính của lớp bằng cách sử dụng. (dấu chấm) làm giá trị của thuộc tính tên được lưu trữ trong lớp

Bây giờ về lớp và đối tượng, các thuộc tính này được gọi là thuộc tính lớp. Vì vậy, khi chúng tôi tạo các đối tượng trong Python, chúng tôi tạo các thuộc tính có thể được chia sẻ giữa các đối tượng khác nhau của các đối tượng. Chúng ta cũng có thể tạo các thuộc tính không thể chia sẻ và sẽ là duy nhất cho từng đối tượng của lớp

Nói một cách đơn giản hơn, chúng ta có thể nói rằng các thuộc tính và hành vi của một lớp được gọi là các thuộc tính trong Python

Ghi chú. Chúng ta phải biết rằng tất cả các thuộc tính của lớp Python có thể được gọi bằng cách sử dụng hàm dir() cũng như hàm vars() (Nó sẽ được thảo luận chi tiết trong các phần sau)

Chúng ta có hai loại thuộc tính trong Python là thuộc tính Class và thuộc tính Instance. Bây giờ chúng ta hãy thảo luận chi tiết về chúng bằng cách sử dụng (các) ví dụ bất cứ khi nào cần thiết

1. Thuộc tính lớp

Một thuộc tính thuộc về một lớp trong Python được gọi là thuộc tính lớp, nghe có vẻ vòng vo? . Một thuộc tính được khai báo và khởi tạo bên ngoài bất kỳ phương thức nào của lớp được gọi là thuộc tính lớp Python. Một thuộc tính lớp có thể được truy cập bởi một lớp cũng như bất kỳ thể hiện nào của lớp (đối tượng của lớp)

Nói một cách đơn giản hơn, chúng ta có thể nói rằng các thuộc tính của lớp là các biến của lớp và chúng có thể được kế thừa bởi mọi đối tượng của lớp đó. Vì các thuộc tính lớp có thể được truy cập bởi mọi đối tượng của lớp đó, nên giá trị của thuộc tính lớp vẫn giữ nguyên cho tất cả các thể hiện của lớp (đối tượng của lớp)

Các thuộc tính lớp được định nghĩa bên ngoài các hàm __init__() trong Python. Bây giờ, hàm __init__() này là gì và nó liên quan đến các lớp như thế nào?

Chà, __init__() là một phương thức trong Python, nó có thể được xem như một phương thức khởi tạo tương đương của hàm tạo C++ hoặc hàm tạo Java (theo cách tiếp cận lập trình hướng đối tượng). __init__() được sử dụng để khởi tạo đối tượng, do đó nó được gọi mỗi khi một đối tượng được tạo bằng một lớp. Phương thức __init__() cho phép lớp khởi tạo các thuộc tính của đối tượng và không phục vụ mục đích nào khác. Phương thức này chỉ được sử dụng trong các lớp. Nó là một biến lớp giúp chúng ta định nghĩa các giá trị khác nhau cho từng đối tượng của một lớp. Chúng ta khai báo thuộc tính thể hiện (loại thuộc tính thứ hai) trong phương thức __init__(). Chúng ta sẽ thảo luận về các thuộc tính thể hiện trong phần phụ tiếp theo

Hãy để chúng tôi lấy một ví dụ để rõ ràng hơn về các thuộc tính lớp trong Python

class Student:
    name = "Sushant"
    
    # constructor
    def __init__(self, rollNumber):
        # defining instance attribute
        self.roll = rollNumber



# creating an object of Student class.
student1 = Student()
# printing class attribute of the Student class using object
print("The name of the student is: ", student1.name)

# printing class attribute of the Student class using class
print("The name of the student is: ", Student.name)

đầu ra

The name of the student is: Sushant
The name of the student is: Sushant

Chúng ta hãy tìm hiểu về ví dụ trên. Trong ví dụ trên, chúng tôi đã tạo một lớp Sinh viên có một tên thuộc tính lớp. Chúng ta cũng đã định nghĩa một số thuộc tính trong hàm __init__() mà chúng ta sẽ thảo luận trong phần tiếp theo. Sau đó, chúng ta tạo một đối tượng hoặc một thể hiện hoặc một biến của lớp Sinh viên

Vì biến name là một thuộc tính của lớp nên nó có thể được truy cập bởi cả lớp cũng như bất kỳ đối tượng nào của lớp. Vì vậy, chúng tôi đã in giá trị của thuộc tính bằng cách sử dụng một đối tượng cũng như lớp

2. Thuộc tính sơ thẩm

Thuộc tính thuộc về một thể hiện của đối tượng được gọi là thuộc tính thể hiện. Hãy để chúng tôi thảo luận thêm. Một thuộc tính được khai báo và khởi tạo bên trong phương thức __init__() của bất kỳ lớp nào được gọi là thuộc tính đối tượng Python. Một thuộc tính thể hiện có thể được truy cập bởi một đối tượng của lớp vì phương thức __init__() được gọi tại thời điểm khởi tạo đối tượng. Do đó, các thuộc tính thể hiện không thể được gọi trực tiếp thông qua tên lớp

Nói một cách đơn giản hơn, chúng ta có thể nói rằng các thuộc tính thể hiện là các biến của đối tượng và chúng có thể khác với mọi đối tượng của lớp đó vì các giá trị thuộc tính được khởi tạo chỉ bằng các đối tượng.

Hãy để chúng tôi lấy một ví dụ để rõ hơn về thuộc tính thể hiện trong Python

class Student:
    # constructor
    def __init__(self, StudentName, rollNumber):
        # defining instance attribute
        self.name = StudentName
        self.roll = rollNumber


# creating an object of the Student class and setting the values of the instance attributes.
student1 = Student("Sushant", 1)
student2 = Student("Saumya", 2)
# printing instance attribute of the first object
print("The name of the first student is: ", student1.name)

# printing instance attribute of the second object
print("The name of the second student is: ", student2.name)
# We cannot invoke the instance attribute using the class name.
# print("The name of the second student is: ", Student.name)

đầu ra

The name of the first student is:  Sushant
The name of the second student is:  Saumya

Trong ví dụ trên, chúng ta đã tạo một lớp Student có hàm __init() sẽ khởi tạo các thuộc tính thể hiện của lớp. Sau đó, chúng tôi đã tạo một đối tượng hoặc một thể hiện hoặc một biến của lớp Sinh viên và gọi các thuộc tính thể hiện của lớp bằng cách sử dụng tên đối tượng

Việc sử dụng bản thân ở đây là gì? . Bằng cách sử dụng self, chúng ta có thể truy cập các thuộc tính và phương thức của lớp trong Python. Chúng ta có thể tự tương quan với toán tử this của C++ có cùng cách sử dụng. Nó liên kết các thuộc tính với các đối số đã cho. Chúng tôi sử dụng self trong các lớp Python vì Python không sử dụng cú pháp @ để chỉ các thuộc tính thể hiện. Python đã quyết định thực hiện các phương thức theo cách làm cho thể hiện của phương thức đó được truyền tự động nhưng không được nhận tự động. tham số đầu tiên của các phương thức là thể hiện mà phương thức được gọi trên. self luôn trỏ đến đối tượng hiện tại

Bây giờ, nếu chúng ta cố gắng in dòng nhận xét cuối cùng của chương trình trên, sẽ xảy ra lỗi i. e. Lỗi thuộc tính. Nó sẽ trông giống như thế này

Traceback (most recent call last):
  File "d:\test.py", line 18, in 
    print("Name of the second student is: ", Student.name)
AttributeError: type object 'Student' has no attribute 'name'

Vì hàm __init__() sẽ được gọi tại thời điểm tạo đối tượng, nên chúng ta không thể gọi các thuộc tính thể hiện bằng tên lớp

Thuộc tính hoạt động như thế nào?

Bất cứ khi nào chúng ta cố gắng truy cập bất kỳ thuộc tính nào bằng cách sử dụng bất kỳ đối tượng nào của lớp, trình thông dịch Python sẽ tìm kiếm thuộc tính được gọi trong danh sách các thuộc tính đối tượng trước tiên. Trong thuộc tính được gọi được tìm thấy trong danh sách thuộc tính cá thể thì trình thông dịch Python sử dụng nếu không thì trình thông dịch Python mở rộng tìm kiếm của nó trong danh sách thuộc tính lớp. Python trả về giá trị của thuộc tính được gọi miễn là nó tìm thấy thuộc tính trong danh sách thuộc tính thể hiện hoặc danh sách thuộc tính lớp

Tuy nhiên, nếu chúng ta cố gắng truy cập một thuộc tính lớp, trình thông dịch Python sẽ trực tiếp tìm kiếm thuộc tính đó trong danh sách thuộc tính lớp

Các phương thức tĩnh và phương thức lớp được liên kết với lớp trong khi phương thức thể hiện được liên kết với một thể hiện của lớp

Không gian tên không là gì ngoài một từ điển chứa các khóa là đối tượng của lớp và các giá trị là thuộc tính của lớp. Một không gian tên được chia thành hai loại i. e. không gian tên lớp hoặc không gian tên đối tượng. Vì vậy, bất cứ khi nào chúng tôi cố gắng truy cập vào bất kỳ thuộc tính nào, nó sẽ được tìm kiếm đầu tiên trong không gian tên đối tượng, sau đó nó được tìm kiếm trong không gian tên lớp

Bây giờ, thời gian truy cập thuộc tính đối tượng thấp hơn thời gian truy cập thuộc tính lớp vì lần đầu tiên không gian tên đối tượng được tìm kiếm. Bây giờ, khi trình thông dịch Python không thể tìm thấy thuộc tính trong không gian tên lớp, nó sẽ báo lỗi

Các phương pháp khác nhau để truy cập các thuộc tính trong Python

Như chúng ta đã thảo luận ở trên, chúng ta có hai loại thuộc tính trong Python là thuộc tính lớp và thuộc tính thể hiện. Chúng ta có thể gọi hoặc truy cập các thuộc tính này bằng cách sử dụng tên lớp và tên đối tượng. Nhưng có phương pháp nào khác để truy cập thuộc tính lớp không? . Chúng ta có thể truy cập các thuộc tính lớp và thuộc tính thể hiện bằng cách sử dụng một số phương thức và hàm Python tích hợp. Hãy cùng chúng tôi tìm hiểu về chúng

  1. getattr() – Đúng như tên gọi, hàm getattr() được sử dụng để truy cập các thuộc tính của một đối tượng. Hàm này nhận hai đối số i. e. tên đối tượng và tên của thuộc tính mà chúng ta muốn lấy
  2. hasattr() – Hàm hasattr() được sử dụng để kiểm tra xem một thuộc tính có tồn tại trong lớp hay không. Hàm này cũng nhận hai đối số i. e. tên đối tượng và tên của thuộc tính mà chúng tôi muốn kiểm tra
  3. setattr() – Hàm setattr() được sử dụng để đặt (các) giá trị của bất kỳ thuộc tính nào. Bây giờ nếu thuộc tính chưa tồn tại thì nó sẽ tạo thuộc tính cho chúng ta. Hàm này nhận ba đối số i. e. tên đối tượng, tên thuộc tính và giá trị của thuộc tính muốn đặt
  4. delattr() – Đúng như tên gọi, hàm delattr() được sử dụng để xóa một thuộc tính. Nếu chúng ta cố truy cập thuộc tính sau khi xóa nó, trình thông dịch Python sẽ báo lỗi có tên. lớp không có thuộc tính. Hàm này cũng nhận hai đối số i. e. tên đối tượng và tên của thuộc tính mà chúng tôi muốn xóa

Hãy để chúng tôi lấy một ví dụ để hiểu rõ hơn

________số 8_______

đầu ra

Sushant
True
Sushant
Traceback (most recent call last):
  File "d:\test.py", line 23, in 
    delattr(student1, "name")
AttributeError: name

Trong hàm trên, chúng ta đã tạo một lớp Student và định nghĩa hai thuộc tính lớp là name và roll. Sau đó, chúng ta tạo một đối tượng cho lớp Student()

Bây giờ, chúng ta đã sử dụng hàm getattr() để lấy thuộc tính tên của lớp. Vì vậy, nó sẽ trả về Sushant. Sau đó, chúng ta sử dụng hàm hasattr() để kiểm tra xem thuộc tính name có trong lớp hay không. Vì nó có mặt nên nó sẽ trả về True

Bây giờ, chúng ta đã sử dụng hàm setattr() để thiết lập giá trị của thuộc tính lớp đại học. Sau đó, chúng tôi đã xóa thuộc tính tên khỏi lớp Sinh viên. Vì vậy, khi chúng tôi cố gắng truy cập thuộc tính tên, cuối cùng, sử dụng hàm getattr(), nó sẽ hiển thị lỗi và thuộc tính đã bị xóa ở dòng trước

Bây giờ chúng ta hãy xem xét một số ứng dụng của thuộc tính trong Python

  • Thuộc tính lớp dùng để tạo các biến có giá trị không đổi (các biến không thay đổi giá trị sau khi khởi tạo)
  • Các thuộc tính của lớp cũng có thể được sử dụng trong các phương thức khác của lớp
  • Các thuộc tính thường chiếm ít không gian bộ nhớ hơn và ít thời gian hơn để khởi tạo so với các biến thông thường
  • Thuộc tính lớp cũng có thể được sử dụng để liệt kê các đối tượng trong tất cả các trường hợp
  • Các thuộc tính có thể được sử dụng để cung cấp giá trị mặc định cho các biến. Tính năng này rất hữu ích khi chúng tôi xây dựng một ứng dụng lớn sử dụng các lớp và đối tượng và chúng tôi muốn các giá trị mặc định nhất định nếu giá trị của biến không được cung cấp. Ví dụ: nếu người dùng không cung cấp bất kỳ tên nào thì chúng tôi có thể đặt tên mặc định của người dùng là Ẩn danh
  • Chúng ta có thể thay đổi thuộc tính lớp thành thuộc tính thể hiện bằng cách thay đổi giá trị của thuộc tính lớp bằng một thể hiện của lớp
  • Trình thông dịch Python coi các hàm và thuộc tính giống nhau. Các phương thức tĩnh, phương thức lớp và phương thức thể hiện đều thuộc về lớp
  • Chúng ta có thể gọi các thuộc tính thể hiện bằng cách sử dụng thuộc tính lớp bằng cách truyền các thể hiện của đối tượng trong phương thức. Tính năng này tiết kiệm bộ nhớ của chương trình Python

Ví dụ về thuộc tính trong Python

Hãy để chúng tôi kiểm tra một ví dụ trong đó chúng tôi sẽ cố gắng truy cập các thuộc tính của một lớp trong một lớp khác. Chúng ta có thể truy cập các thuộc tính của một lớp này sang một lớp khác bằng cách chuyển đối tượng của lớp này sang lớp khác

class Student:
    name = "Sushant"
    roll = 1

# creating an object of Student class.
student1 = Student()
# printing property of the Student class (name)
print("The name of the student is: ", student1.name)
0

đầu ra

Đầu tiên, chúng tôi đã tạo một lớp có tên là A. Trong lớp chúng ta đã khởi tạo hai thuộc tính thể hiện i. e. biến1 và biến2 sử dụng phương thức __init__() (hàm tạo). Chúng tôi cũng đã xác định một phương pháp tôi. e. testMethod() sẽ gán tổng của cả hai biến này vào biến1 rồi trả về

Một lần nữa, chúng ta đã định nghĩa một lớp có tên B kế thừa lớp A. Bây giờ, sử dụng phương thức __init__(), chúng ta cũng đã khởi tạo các thuộc tính thể hiện của lớp thứ hai (B)

Bây giờ, chúng ta đã tạo một đối tượng của lớp A và sau đó gọi testMethod() của nó và lưu trữ giá trị của nó trong biến tổng và in nó. Tương tự, chúng tôi đã tạo một đối tượng của lớp B và sau đó in các giá trị thuộc tính thể hiện của lớp B

Thuộc tính 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.

Các thuộc tính trong Python cho danh sách là gì?

Các đặc điểm quan trọng của danh sách Python như sau. .
Danh sách được sắp xếp
Danh sách có thể chứa bất kỳ đối tượng tùy ý nào
Các phần tử danh sách có thể được truy cập theo chỉ mục
Danh sách có thể được lồng vào độ sâu tùy ý
Danh sách có thể thay đổi
Danh sách động

Ba thuộc tính chính của đối tượng Python là gì?

Trường hợp - Một đối tượng riêng lẻ của một lớp nhất định. Một đối tượng obj thuộc về lớp Circle, chẳng hạn, là một thể hiện của lớp Circle. Khởi tạo - Việc tạo một thể hiện của một lớp. Phương thức - Một loại hàm đặc biệt được định nghĩa trong định nghĩa lớp

Thuộc tính và phương thức trong Python là gì?

Một biến được lưu trữ trong một thể hiện hoặc lớp được gọi là một thuộc tính. Một hàm được lưu trữ trong một thể hiện hoặc lớp được gọi là một phương thức .