Hướng dẫn how are attributes of an object accessed in python? - các thuộc tính của một đối tượng được truy cập trong python như thế nào?

Python là một ngôn ngữ cố gắng đẩy mô hình hướng đối tượng đến mức tối đa của nó. Điều này có nghĩa là mô hình đối tượng của nó rất mạnh so với các ngôn ngữ khác, nhưng cũng là hành vi của mã Python có thể gây ngạc nhiên cho các lập trình viên mới.

Trong bài đăng này, tôi muốn xem xét các phương thức mà Python cung cấp để truy cập các thuộc tính đối tượng, cố gắng cung cấp một cái nhìn tổng quan toàn diện về vấn đề cho mọi người muốn bắt đầu lập trình bằng ngôn ngữ đẹp này.

Thuộc tính là gì? ¶

Vì danh pháp có thể thay đổi từ ngôn ngữ này sang ngôn ngữ khác, hãy để tôi đặt tên cho mọi thứ. Trong Python, chúng tôi gọi thuộc tính mọi thứ được chứa bên trong một đối tượng. Trong Python không có sự khác biệt thực sự giữa dữ liệu và chức năng đơn giản, là cả hai đối tượng, vì vậy những gì tôi sẽ nói về các thuộc tính là hoàn toàn hợp lệ ngay cả đối với các phương thức.

Như một ví dụ làm việc, trong bài đăng này tôi sẽ sử dụng lớp sau. Nó đại diện cho một cuốn sách với một tiêu đề và một tác giả. Nó cũng cung cấp một phương thức

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
5 trả về một đại diện chuỗi của cuốn sách.

class Book:
    def __init__[self, title, author]:
        self.title = title
        self.author = author

    def get_entry[self]:
        return "{0} by {1}".format[self.title, self.author]

Mỗi trường hợp của lớp này sẽ chứa ba thuộc tính, cụ thể là

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
6,
>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
7 và
>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
8, ngoài các thuộc tính tiêu chuẩn được cung cấp bởi tổ tiên
>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
9.

Người dùng Python 2: Hãy nhớ rằng trong Python 2, bạn phải chỉ định rằng

>>> b.get_entry

0 là một lớp mới viết
>>> b.get_entry

1
: remember that in Python 2 you have to specify that
>>> b.get_entry

0 is a new-style class writing
>>> b.get_entry

1

Truy cập thuộc tính cơ bản

Trong Python, bạn có thể gọi một thuộc tính của một đối tượng bằng cách sử dụng tổng hợp chấm chấm được chấp nhận rộng rãi

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'

Như đã đề cập, cơ chế này cũng hoạt động với các phương pháp.

>>> b.get_entry

Ở đây tôi cố tình bỏ qua các dấu ngoặc [ngoặc đơn] để hiển thị những gì xảy ra khi truy cập phương thức. Để giải thích chuyên sâu về sự khác biệt giữa các hàm và phương thức ràng buộc, hãy đọc bài đăng này.

Khi một đối tượng không chứa thuộc tính mà chúng tôi đang tìm kiếm, Python sẽ tăng ngoại lệ

>>> b.get_entry

2

>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>

Cũng hãy nhớ rằng các đối tượng Python cung cấp một loạt các thuộc tính được tạo tự động như

>>> b.get_entry

3 hoặc
>>> b.get_entry

4. Các thuộc tính này có thể được đọc chính xác giống như các thuộc tính tiêu chuẩn, vì trong Python, tiền tố dấu gạch dưới và hậu tố chỉ là một thỏa thuận quý ông giữa các lập trình viên.

>>> b.__class__

Khi bạn cố gắng thay đổi giá trị của một thuộc tính [bạn viết thuộc tính], cú pháp không thay đổi.

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.author = "David Carroll Eddings"
>>> b.author
'David Carroll Eddings'

Các đối tượng hạng nhất trong Python¶

Các chức năng, giấy gói và nhà máy bậc cao

Tìm hiểu tất cả những gì bạn cần biết để hiểu quốc tịch hạng nhất trong Python, cửa ngõ để nắm bắt cách các nhà trang trí hoạt động và cách lập trình chức năng có thể tăng cường mã của bạn.

Đặc tính¶

Đôi khi bạn muốn có một thuộc tính giá trị đến từ các thuộc tính khác hoặc nói chung, giá trị nào sẽ được tính vào lúc này. Cách tiêu chuẩn để đối phó với tình huống này là tạo ra một phương pháp, được gọi là getter, giống như tôi đã làm với

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
5.

Trong Python, bạn có thể "che dấu" phương thức, giao thoa nó bằng thuộc tính dữ liệu, trong trường hợp này được gọi là thuộc tính.

class Book[object]:
    def __init__[self, title, author]:
        self.title = title
        self.author = author

    def get_entry[self]:
        return "{0} by {1}".format[self.title, self.author]

    entry = property[get_entry]

Cú pháp trên xác định thuộc tính

>>> b.get_entry

6 mà tự động gọi
>>> b.get_entry

7 khi đọc.

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.entry
'Pawn of Prophecy by David Eddings'

Các thuộc tính cho phép chỉ định một phương thức ghi [một setter], được gọi tự động khi bạn cố gắng thay đổi giá trị của chính thuộc tính.

class Book[object]:
    def __init__[self, title, author]:
        self.title = title
        self.author = author

    def _get_entry[self]:
        return "{0} by {1}".format[self.title, self.author]

    def _set_entry[self, value]:
        if " by " not in value:
            raise ValueError["Entries shall be formatted as ' by '"]
        self.title, self.author = value.split[" by "]

    entry = property[_get_entry, _set_entry]

Xin lưu ý rằng phương thức SET sẽ chấp nhận giá trị là tham số thứ hai của nó. Khi getters và setters được che dấu bởi một tài sản, có thể là một điều tốt để làm cho tên của họ bắt đầu với một dấu gạch dưới, chỉ để báo hiệu rằng chúng không được sử dụng trực tiếp. Tuy nhiên, hãy nhớ rằng điều này không có ý nghĩa đặc biệt cho ngôn ngữ, chỉ là một quy ước giữa các lập trình viên.

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.entry
'Pawn of Prophecy by David Eddings'
>>> b.entry = "Queen of Sorcery by David Carroll Eddings"
>>> b.title
'Queen of Sorcery'
>>> b.author
'David Carroll Eddings'
>>> b.entry = "Magician's Gambit, David Carroll Eddings"
Traceback  [most recent call last]:
  File "", line 1, in 
  File "", line 9, in _set_entry
ValueError: Entries shall be formatted as ' by '

Mặc dù các thuộc tính thường được xác định trong trường hợp thông qua phương thức

>>> b.get_entry

8 [một phần của cơ chế hàm tạo], các thuộc tính là một phần của chính lớp.

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
0

Tuy nhiên, hãy nhớ rằng tất cả các trường hợp của lớp đó đều chia sẻ cùng một đối tượng thuộc tính, đây là một loại ràng buộc tự động giữa các thuộc tính và phương thức, và không phải là giá trị của chính thuộc tính.

Truy cập thuộc tính SoftCoding

Khi bạn viết một quyền truy cập thuộc tính cơ bản như tôi đã làm trong phần đầu tiên, bạn đang mã hóa tên thuộc tính. Thuộc tính bạn đang tìm kiếm là một phần của chính mã nguồn và sẽ được biết đến tại thời điểm mã hóa.

Điều gì xảy ra nếu bạn muốn truy cập một thuộc tính có tên được chứa trong một biến dưới dạng chuỗi? Điều này thường xảy ra khi viết trình gỡ lỗi hoặc công cụ kiểm tra cho phép người dùng chỉ định tương tác các thuộc tính họ muốn xem.

Để thực hiện python truy cập "gián tiếp" này cung cấp chức năng

>>> b.get_entry

9 tích hợp, chấp nhận một đối tượng và tên của một thuộc tính.

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
1

Loại quyền truy cập thuộc tính này có thể hữu ích ngay cả khi truy cập nhiều thuộc tính, cho phép viết đơn giản cho các vòng lặp hoặc danh sách toàn diện

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
2

Mặc dù loại truy cập này hoàn toàn có giá trị trong Python, bạn không nên sử dụng nó miễn là bạn có thể sử dụng truy cập chấm trực tiếp. Viết mã khó khăn có vẻ rất thông minh, nhưng khi nói đến việc gỡ lỗi "càng đơn giản càng tốt".

Tránh thất bại

Khi bạn cố gắng truy cập một thuộc tính không tồn tại, với cú pháp chấm hoặc với

>>> b.get_entry

9, Python cho bạn cơ hội cuối cùng trước khi tăng ngoại lệ
>>> b.get_entry

2. Nó gọi phương thức đặc biệt
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
2 [chú ý đến dấu gạch dưới kép] chuyển tên của thuộc tính: Trong ví dụ trước, khi truy cập
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
3, Python gọi
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
4.

Trong trường hợp này, vì lớp

>>> b.get_entry

0 hoặc tổ tiên của nó không xác định phương thức
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
2, truy cập thuộc tính không thành công và Python làm tăng ngoại lệ.

Chúng ta hãy cố gắng xác định phương pháp, chỉ để cho thấy rằng nó thực sự hoạt động

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
3

CẢNH BÁO: Đây chỉ là một ví dụ để cho thấy cách thức hoạt động của

>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
2. Mã được trình bày ở đây sẽ không được coi là một ví dụ tốt về lập trình Python.: this is just an example to show how
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
2 works. The code presented here shall not be considered a good example of Python programming.

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
4

Như bạn có thể thấy các thuộc tính

>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
8 và
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
9 được truy cập chính xác ngay cả khi chúng không thực sự tồn tại bên trong đối tượng.

Để tìm một mục đích sử dụng tốt cho

>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
2 và
>>> b.get_entry

9, chúng ta cần phải bước vào một thứ gì đó phức tạp hơn một chút, đó là cơ chế ủy quyền rõ ràng liên quan đến một thành phần giữa các đối tượng. Bạn có thể tìm thấy thêm chi tiết về chủ đề này trong bài viết này.

Cả

>>> b.get_entry

9 và
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
2 đều có đối tác của họ để quản lý quyền truy cập viết, cụ thể là
>>> b.__class__

4 và
>>> b.__class__

5.

Các đối tượng hạng nhất trong Python¶

Các chức năng, giấy gói và nhà máy bậc cao

Tìm hiểu tất cả những gì bạn cần biết để hiểu quốc tịch hạng nhất trong Python, cửa ngõ để nắm bắt cách các nhà trang trí hoạt động và cách lập trình chức năng có thể tăng cường mã của bạn.

Bí mật sâu sắc nhất

Mỗi đối tượng Python [bắt đầu từ chính

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.title
'Pawn of Prophecy'
9] đều chứa một phương thức rất đặc biệt gọi là
>>> b.__class__

7 không bao giờ được gọi là rõ ràng hoặc ghi đè. Phương thức này thực hiện độ phân giải thuộc tính bên trong đối tượng, cung cấp tra cứu thuộc tính thông qua hệ thống phân cấp kế thừa, giải quyết các thuộc tính, gọi
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
2 và nếu cần thiết sẽ tăng ngoại lệ
>>> b.get_entry

2.

Do tính chất rất phức tạp của phương pháp này và tầm quan trọng nhất của vai trò của nó trong việc tạo ra các đối tượng Python, bạn sẽ không bao giờ, không bao giờ cố gắng ghi đè nó. Nếu bạn thấy mình trong một tình huống giao dịch rõ ràng với

>>> b.__class__

7 là cần thiết, bạn có thể khá chắc chắn rằng bạn đã làm điều gì đó sai.

Kết luận công

Như bạn có thể dễ dàng hiểu được, 95% mã Python của bạn sẽ dựa trên quyền truy cập thuộc tính chấm tiêu chuẩn. Biết các cách khác để quản lý các thuộc tính [thuộc tính] và nhận thức được những gì xảy ra đằng sau hậu trường [

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.author = "David Carroll Eddings"
>>> b.author
'David Carroll Eddings'
1,
>>> b.publisher
Traceback  [most recent call last]:
  File "", line 1, in 
AttributeError: 'Book' object has no attribute 'publisher'
>>>
2 và
>>> b.__class__

7] tuy nhiên để đạt được.

Cập nhật công

2015-01-16: Cảm ơn Jamie, người đã phát hiện ra một phương pháp

>>> b = Book[title="Pawn of Prophecy", author="David Eddings"]
>>> b.author = "David Carroll Eddings"
>>> b.author
'David Carroll Eddings'
4 sai được trình bày trong phần cuối cùng.

Nhận xét¶

Hãy liên hệ với tôi trên Twitter nếu bạn có thắc mắc. Trang GitHub vấn đề là nơi tốt nhất để gửi sửa chữa.

Người vận hành nào được sử dụng để truy cập các thuộc tính của một đối tượng?

Ký hiệu chấm: Sử dụng toán tử DOT [.] Để truy cập các thuộc tính hoặc phương thức của đối tượng.dot operator [ . ] to access an object's attributes or methods.

Thuộc tính của một đối tượng trong Python là gì?

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__.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.

Làm thế nào để bạn truy cập một đối tượng lớp trong Python?

Để truy cập phương thức của một lớp, chúng ta cần khởi tạo một lớp vào một đối tượng. Sau đó, chúng ta có thể truy cập phương thức dưới dạng phương thức thể hiện của lớp như được hiển thị trong chương trình bên dưới.Ở đây thông qua tham số tự, các phương thức thể hiện có thể truy cập các thuộc tính và các phương thức khác trên cùng một đối tượng.instantiate a class into an object. Then we can access the method as an instance method of the class as shown in the program below. Here through the self parameter, instance methods can access attributes and other methods on the same object.

Làm cách nào để nhận được giá trị của một đối tượng trong Python?

Hàm python getAttr [] được sử dụng để nhận giá trị của thuộc tính của một đối tượng và nếu không tìm thấy thuộc tính nào của đối tượng đó, giá trị mặc định được trả về.Về cơ bản, trả về giá trị mặc định là lý do chính khiến bạn có thể cần sử dụng hàm python getAttr []. is used to get the value of an object's attribute and if no attribute of that object is found, default value is returned. Basically, returning the default value is the main reason why you may need to use Python getattr[] function.

Bài Viết Liên Quan

Chủ Đề