Hướng dẫn how do you print attributes in python? - làm thế nào để bạn in các thuộc tính trong python?

Có chức năng tích hợp để in tất cả các thuộc tính và giá trị hiện tại của một đối tượng không?

Không. Câu trả lời được nâng cấp nhiều nhất không bao gồm một số loại thuộc tính và câu trả lời được chấp nhận cho thấy cách lấy tất cả các thuộc tính, bao gồm các phương thức và các phần của API không công khai. Nhưng không có chức năng xây dựng hoàn chỉnh tốt cho việc này.

Vì vậy, hệ quả ngắn là bạn có thể tự viết, nhưng nó sẽ tính toán các thuộc tính và các mô tả dữ liệu được tính toán khác là một phần của API công khai và bạn có thể không muốn điều đó:

from pprint import pprint
from inspect import getmembers
from types import FunctionType

def attributes(obj):
    disallowed_names = {
      name for name, value in getmembers(type(obj)) 
        if isinstance(value, FunctionType)}
    return {
      name: getattr(obj, name) for name in dir(obj) 
        if name[0] != '_' and name not in disallowed_names and hasattr(obj, name)}

def print_attributes(obj):
    pprint(attributes(obj))

Vấn đề với các câu trả lời khác

Quan sát ứng dụng của câu trả lời hiện tại được bỏ phiếu hàng đầu trên một lớp với rất nhiều loại thành viên dữ liệu khác nhau:

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))

Chỉ in:

{'baz': 'baz'}

Bởi vì

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
2 chỉ trả về
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
3 của một đối tượng và nó không phải là một bản sao, vì vậy nếu bạn sửa đổi dict được trả về bởi VAR, bạn cũng sẽ sửa đổi
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
3 của chính đối tượng.

vars(obj)['quux'] = 'WHAT?!'
vars(obj)

Trả lại:

{'baz': 'baz', 'quux': 'WHAT?!'}

- Điều này xấu vì Quux là một tài sản mà chúng ta không nên đặt và không nên ở trong không gian tên ...

Áp dụng lời khuyên trong câu trả lời hiện đang được chấp nhận (và những người khác) không tốt hơn nhiều:

>>> dir(obj)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', 'bar', 'baz', 'foo', 'quux']

Như chúng ta có thể thấy,

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
5 chỉ trả về tất cả (thực sự chỉ là hầu hết) các tên liên quan đến một đối tượng.

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
6, được đề cập trong các bình luận, tương tự như thiếu sót - nó trả về tất cả các tên và giá trị.

Từ lớp học

Khi dạy tôi, học sinh của mình tạo ra một chức năng cung cấp API công khai về ngữ nghĩa của một đối tượng:

def api(obj):
    return [name for name in dir(obj) if name[0] != '_']

Chúng tôi có thể mở rộng điều này để cung cấp một bản sao của không gian tên ngữ nghĩa của một đối tượng, nhưng chúng tôi cần loại trừ

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
7 không được gán và nếu chúng tôi thực hiện yêu cầu "thuộc tính hiện tại" một cách nghiêm túc, chúng tôi cần loại trừ các thuộc tính được tính toán ( vì chúng có thể trở nên đắt đỏ, và có thể được hiểu là không phải là "hiện tại"):

from types import FunctionType
from inspect import getmembers

def attrs(obj):
    disallowed_properties = {
        name for name, value in getmembers(type(obj)) 
        if isinstance(value, (property, FunctionType))
    }
    return {
        name: getattr(obj, name) for name in api(obj) 
        if name not in disallowed_properties and hasattr(obj, name)
    }

Và bây giờ chúng tôi không tính toán hoặc hiển thị tài sản, Quux:

________số 8

Hãy cẩn thận

Nhưng có lẽ chúng ta biết tài sản của chúng ta không đắt tiền. Chúng tôi có thể muốn thay đổi logic để bao gồm chúng. Và có lẽ chúng tôi muốn loại trừ các mô tả dữ liệu tùy chỉnh khác thay thế.custom data descriptors instead.

Sau đó, chúng ta cần tùy chỉnh thêm chức năng này. Và vì vậy, có ý nghĩa rằng chúng ta không thể có một chức năng tích hợp mà phép một cách kỳ diệu biết chính xác những gì chúng ta muốn và cung cấp nó. Đây là chức năng mà chúng ta cần để tạo ra chính mình.

Sự kết luận

Không có chức năng tích hợp nào làm điều này, và bạn nên làm những gì phù hợp nhất cho tình huống của bạn.

  1. Làm thế nào để
  2. Python làm thế nào
  3. In các thuộc tính của đối tượng trong Python

Đã tạo: tháng 2 đến 14, 2021

  1. In các thuộc tính của một đối tượng trong Python bằng hàm
    from pprint import pprint
    
    class Obj:
        __slots__ = 'foo', 'bar', '__dict__'
        def __init__(self, baz):
            self.foo = ''
            self.bar = 0
            self.baz = baz
        @property
        def quux(self):
            return self.foo * self.bar
    
    obj = Obj('baz')
    pprint(vars(obj))
    
    8 trong Python
  2. In các thuộc tính của một đối tượng trong Python bằng hàm
    from pprint import pprint
    
    class Obj:
        __slots__ = 'foo', 'bar', '__dict__'
        def __init__(self, baz):
            self.foo = ''
            self.bar = 0
            self.baz = baz
        @property
        def quux(self):
            return self.foo * self.bar
    
    obj = Obj('baz')
    pprint(vars(obj))
    
    9 trong Python

Các hàm

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
9, khi được gọi không có đối số, trả về từ điển với bảng ký hiệu cục bộ hiện tại. Nếu một đối tượng được chuyển đến hàm
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
9, nó sẽ trả về thuộc tính
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
3 của đối tượng. Nếu đối tượng được cung cấp dưới dạng đầu vào không có thuộc tính
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
3,
vars(obj)['quux'] = 'WHAT?!'
vars(obj)
6 sẽ được nâng lên.

Trong hướng dẫn này, chúng tôi sẽ xem xét làm thế nào để có được và in một thuộc tính của đối tượng trong Python.

In các thuộc tính của một đối tượng trong Python bằng hàm from pprint import pprint class Obj: __slots__ = 'foo', 'bar', '__dict__' def __init__(self, baz): self.foo = '' self.bar = 0 self.baz = baz @property def quux(self): return self.foo * self.bar obj = Obj('baz') pprint(vars(obj)) 8 trong Python

Hàm

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
8 tích hợp, khi được gọi không có đối số, trả về danh sách các tên trong phạm vi cục bộ hiện tại và khi một đối tượng được truyền dưới dạng đối số, nó sẽ trả về danh sách các thuộc tính hợp lệ của đối tượng.

Để in các thuộc tính của đối tượng, chúng ta cần chuyển đối tượng đến hàm

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
8 và in các thuộc tính của đối tượng được trả về bởi đối tượng
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
8. Chúng ta có thể sử dụng phương pháp
{'baz': 'baz'}
8 của mô-đun
{'baz': 'baz'}
9 để in các thuộc tính theo cách được định dạng tốt. Mã ví dụ dưới đây trình bày cách sử dụng hàm
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
8 để in các thuộc tính của đối tượng:

from pprint import pprint

mylist = list()
pprint(dir(mylist))

Output:

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
0

In các thuộc tính của một đối tượng trong Python bằng hàm from pprint import pprint class Obj: __slots__ = 'foo', 'bar', '__dict__' def __init__(self, baz): self.foo = '' self.bar = 0 self.baz = baz @property def quux(self): return self.foo * self.bar obj = Obj('baz') pprint(vars(obj)) 9 trong Python

Các hàm

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
9, khi được gọi không có đối số, trả về từ điển với bảng ký hiệu cục bộ hiện tại. Nếu một đối tượng được chuyển đến hàm
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
9, nó sẽ trả về thuộc tính
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
3 của đối tượng. Nếu đối tượng được cung cấp dưới dạng đầu vào không có thuộc tính
from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
3,
vars(obj)['quux'] = 'WHAT?!'
vars(obj)
6 sẽ được nâng lên.

Ví dụ về mã dưới đây trình bày cách sử dụng hàm

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
9 để in các thuộc tính đối tượng trong Python.

from pprint import pprint

class Obj:
    __slots__ = 'foo', 'bar', '__dict__'
    def __init__(self, baz):
        self.foo = ''
        self.bar = 0
        self.baz = baz
    @property
    def quux(self):
        return self.foo * self.bar

obj = Obj('baz')
pprint(vars(obj))
1

Bài viết liên quan - Đối tượng Python

  • Thêm thuộc tính vào đối tượng trong Python
  • Kiểm tra xem đối tượng Python có thuộc tính không
  • Khắc phục đối tượng không có lỗi thuộc tính trong Python
  • Khắc phục đối tượng danh sách lỗi không thể gọi được trong Python
  • Làm thế nào để tôi nhận được các thuộc tính trong Python?

    Chức năng Python getAttr (). 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ề.. Python getattr() function is used to get the value of an object's attribute and if no attribute of that object is found, default value is returned.

    Làm thế nào để bạn in tất cả các thuộc tính trong một lớp?

    Để có được danh sách tất cả các thuộc tính, các phương thức cùng với một số phương thức ma thuật được kế thừa của một lớp, chúng tôi sử dụng một bản tích hợp được gọi là Dir () ..
    Một cách khác để tìm một danh sách các thuộc tính là bằng cách sử dụng kiểm tra mô -đun.....
    Để tìm các thuộc tính, chúng ta cũng có thể sử dụng Phương pháp ma thuật __dict__.....
    Để tìm các thuộc tính, chúng ta cũng có thể sử dụng hàm vars () ..

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

    Để liệt kê tất cả các thuộc tính của một đối tượng, hãy sử dụng hàm dir () tích hợp.Nó trả về một danh sách dài các tên thuộc tính, nghĩa là, phương thức và tên biến của đối tượng.use the built-in dir() function. It returns a long list of attribute names, that is, method and variable names of the object.

    Làm thế nào để bạn in thông tin về một đối tượng trong Python?

    Để in các thuộc tính của một đối tượng, chúng ta có thể sử dụng đối tượng.Sau khi viết mã trên (thuộc tính đối tượng in Python), một khi bạn sẽ in ra X.__dict__ ”Sau đó, đầu ra sẽ xuất hiện.object. __dict__” and it return a dictionary of all names and attributes of object. After writing the above code (python print object attributes), once you will print “x. __dict__” then the output will appear.