Hướng dẫn how do i get the class of a string in python? - làm cách nào để lấy lớp của một chuỗi trong python?

Bạn cũng có thể tạo một dict với chính các lớp làm chìa khóa, không nhất thiết là các tên lớp

typefunc={
    int:lambda x: x*2,
    str:lambda s:'(*(%s)*)'%s
}

def transform (param):
    print typefunc[type(param)](param)

transform (1)
>>> 2
transform ("hi")
>>> (*(hi)*)

Ở đây

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
2 là một chế độ ánh xạ hàm cho từng loại.
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
3 có chức năng đó và áp dụng nó vào tham số.

Tất nhiên, sẽ tốt hơn nhiều nếu sử dụng 'thật' OOP

Đây là một lớp Python:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

Nếu chúng ta tạo một thể hiện của lớp này và sau đó xem phiên bản đó từ bản phát hành, chúng ta sẽ thấy biểu diễn chuỗi của đối tượng

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
4 đó:

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>

Biểu diễn chuỗi mặc định cho các phiên bản lớp là không có ích. Tất cả những gì chúng ta thấy là chúng ta có một đối tượng và nó có loại

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
4.

Làm thế nào chúng ta có thể làm cho đại diện chuỗi này hữu ích hơn?

Tùy chỉnh biểu diễn chuỗi

Bạn có thể tùy chỉnh biểu diễn chuỗi của các phiên bản lớp bằng cách viết phương thức

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 cho lớp
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
4 của chúng tôi:

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"

Bây giờ khi chúng ta xem xét các trường hợp của lớp

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
4 của chúng ta tại Python replin, chúng ta sẽ thấy một cái gì đó trông giống như mã chúng ta đã sử dụng để tạo ra quan điểm của chúng ta:

>>> p = Point(1, 2)
>>> p
Point(1, 2)
>>> p.x = 4
>>> p
Point(4, 2)

Nếu chúng ta chuyển đổi các đối tượng

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
4 của mình thành một chuỗi hoặc in chúng, chúng ta cũng sẽ thấy đại diện chuỗi mới của chúng ta:

>>> str(p)
'Point(4, 2)'
>>> print(p)
Point(4, 2)

Nếu lớp của bạn không có biểu diễn chuỗi đẹp và bạn muốn tùy chỉnh nó, hãy viết một phương thức

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 thường là cách để thực hiện điều đó.

Hai loại biểu diễn chuỗi

Python thực sự có hai biểu diễn chuỗi khác nhau cho tất cả các đối tượng. Một đại diện chuỗi là một biểu diễn có thể đọc được của con người và chuỗi còn lại là người có thể đọc được của lập trình viên.two different string representations for all objects. One string representation is the human-readable one and the other is the programmer-readable one.

Phương thức

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 chỉ định biểu diễn chuỗi có thể đọc được của lập trình viên. Nếu bạn chỉ muốn một đại diện chuỗi, đây là một biểu diễn chỉ định.

Biểu diễn chuỗi có thể đọc được của con người được chỉ định bằng phương pháp

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2. Các đối tượng
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
4 của chúng tôi thực sự đã có phương thức
class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2:

>>> p.__str__()
'Point(4, 2)'
>>> p.__repr__()
'Point(4, 2)'

Việc triển khai

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 mặc định chỉ gọi
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6:

    def __str__(self):
        return self.__repr__()

Việc triển khai

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 mặc định trông giống như thế này:

    def __repr__(self):
        cls = type(self)
        return f"<{cls.__module__}.{cls.__name__} object at {hex(id(self))}>"

Vì vậy, trừ khi bạn cần một biểu diễn chuỗi thứ hai cho đối tượng của mình, bạn có thể thoát khỏi chỉ bằng cách thực hiện phương thức

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6.

Bạn có thể đọc thêm về các biểu diễn hai chuỗi của Python tại đây.

Khi >>> p = Point(1, 2) >>> p <__main__.Point object at 0x7fdf0c5961f0> 6 và class Point: def __init__(self, x, y): self.x = x self.y = y def __repr__(self): return f"Point({self.x}, {self.y})" 2 được sử dụng

Đây là một lớp chỉ định cả hai phương thức

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 và
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6:

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"

    def __str__(self):
        return f"Point at ({self.x}, {self.y})"

Việc gõ tên của đối tượng của chúng tôi tại Python REP sẽ sử dụng phương thức

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 và do đó sẽ gọi rõ ràng chức năng
>>> p = Point(1, 2)
>>> p
Point(1, 2)
>>> p.x = 4
>>> p
Point(4, 2)
4 tích hợp::

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
0

In Đối tượng của chúng tôi sẽ sử dụng phương thức

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 và chức năng
>>> p = Point(1, 2)
>>> p
Point(1, 2)
>>> p.x = 4
>>> p
Point(4, 2)
6 tích hợp và định dạng chuỗi:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
1

Phương thức

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 được sử dụng ở những nơi mà một lập trình viên sẽ xem xét đối tượng này (trong bản sao và đôi khi trong những thứ như tệp nhật ký). Phương pháp
class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 được sử dụng ở những nơi mà người dùng cuối của mã của chúng tôi có thể đang xem xét một đại diện cho đối tượng của chúng tôi (ví dụ: khi in nó).

Khi nào bạn nên viết một phương thức class Point: def __init__(self, x, y): self.x = x self.y = y def __repr__(self): return f"Point({self.x}, {self.y})" 2?

Nói chung, bạn sẽ chỉ muốn một phương thức

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 nếu bạn cần hai biểu diễn chuỗi khác nhau cho đối tượng của mình.

Nếu bạn viết một phương thức

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 nhưng không có phương thức
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
2

Bạn sẽ thấy rằng biểu diễn có thể đọc được của lập trình viên đối tượng của bạn không được tùy chỉnh:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
3

Hầu hết thời gian bạn sẽ chỉ cần một biểu diễn chuỗi, vì vậy khi nghi ngờ chỉ cần viết một phương thức

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6.

Một ngoại lệ đáng chú ý: Khi bạn kế thừa từ một đối tượng đã triển khai

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 để gọi
class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 (thay vì cách khác, như mặc định) có lẽ bạn sẽ muốn tùy chỉnh phương thức
class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2. Một trong số ít những nơi tôi đã thấy điều này trong Python là trong khung web Django. Các mô hình Django tùy chỉnh hai phương thức này để
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 dựa vào
class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2, vì vậy hầu như bạn sẽ luôn muốn chỉ định phương thức
class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 trên các mô hình django của bạn nhưng không phải là phương thức
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6.

Những đối tượng thực sự có hai biểu diễn chuỗi?

Hầu hết các đối tượng trong Python chỉ có một đại diện chuỗi.

Khi bạn in một danh sách (đại diện có thể đọc được của con người), bạn sẽ thấy điều tương tự như khi bạn tham khảo danh sách tại bản phát (đại diện có thể đọc được của lập trình viên):

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
4

Số nguyên và số điểm nổi cũng chỉ có một đại diện chuỗi:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
5

Danh sách, bộ dữ liệu, bộ, từ điển, số nguyên, số điểm nổi, booleans và

>>> p.__str__()
'Point(4, 2)'
>>> p.__repr__()
'Point(4, 2)'
1 đều chỉ có một đại diện chuỗi: một đại diện có thể đọc được của lập trình viên.

Trong thư viện tiêu chuẩn Python, bạn sẽ tìm thấy một số đối tượng có hai biểu diễn chuỗi. Ví dụ: các đối tượng

>>> p.__str__()
'Point(4, 2)'
>>> p.__repr__()
'Point(4, 2)'
2 và
>>> p.__str__()
'Point(4, 2)'
>>> p.__repr__()
'Point(4, 2)'
3 trong mô -đun
>>> p.__str__()
'Point(4, 2)'
>>> p.__repr__()
'Point(4, 2)'
2 có hai biểu diễn chuỗi:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
6

Và ban đầu nó có vẻ không giống như vậy, nhưng các chuỗi thực sự có hai biểu diễn chuỗi. Việc tham chiếu một chuỗi tại bản phát lại và gọi

>>> p = Point(1, 2)
>>> p
Point(1, 2)
>>> p.x = 4
>>> p
Point(4, 2)
6 trên chuỗi dường như có thể làm điều tương tự:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
7

Nhưng nếu bạn in chuỗi, bạn sẽ thấy rằng có một sự khác biệt:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
8

Biểu diễn có thể đọc được của con người cho các chuỗi không có trích dẫn nhưng người lập trình có thể đọc được:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
9

Sự khác biệt này rõ ràng hơn với các chuỗi có ký tự thoát trong đó:

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
0

Vì vậy, làm thế nào để tôi tạo một đại diện chuỗi cho lớp của tôi?

Câu trả lời dễ dàng là thực hiện một phương thức

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 vì hầu hết các lớp trong Python chỉ nên có một đại diện chuỗi phổ quát.make a
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 method
because most classes in Python should have just one universal string representation.

Mặc dù có hai phương thức cho các biểu diễn chuỗi trong Python (

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 và
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6), phương thức
class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 gọi
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 theo mặc định, vì vậy nếu bạn sẽ chỉ tạo một đại diện cho một chuỗi cho lớp của bạn,
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 là phương pháp bạn đang tìm kiếm.just one string representation for your class the
>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 is the method you're looking for
.

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
1

Vẫn không chắc bạn nhận được nó? Đọc thêm về

>>> p = Point(1, 2)
>>> p
<__main__.Point object at 0x7fdf0c5961f0>
6 và
class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"
2 tại đây.

Làm thế nào để tôi tìm thấy lớp của một chuỗi trong Python?

Phương pháp số 1: Sử dụng isInstance (x, str) bằng cách đưa ra đối số thứ hai như là str str, chúng ta có thể kiểm tra xem biến chúng ta vượt qua có phải là một chuỗi hay không.Using isinstance(x, str) By giving the second argument as “str”, we can check if the variable we pass is a string or not.

Có một lớp chuỗi trong Python?

Python có một lớp chuỗi tích hợp có tên "str" ​​với nhiều tính năng tiện dụng (có một mô-đun cũ hơn có tên là "chuỗi" mà bạn không nên sử dụng). Chuỗi chữ có thể được bao quanh bởi các trích dẫn kép hoặc đơn, mặc dù các trích dẫn đơn được sử dụng phổ biến hơn. with many handy features (there is an older module named "string" which you should not use). String literals can be enclosed by either double or single quotes, although single quotes are more commonly used.

Phương pháp __ str __ là gì?

Phương thức __str__ trong Python đại diện cho các đối tượng lớp dưới dạng chuỗi - nó có thể được sử dụng cho các lớp.Phương pháp __str__ nên được xác định theo cách dễ đọc và xuất ra tất cả các thành viên của lớp.Phương pháp này cũng được sử dụng như một công cụ gỡ lỗi khi các thành viên của một lớp cần được kiểm tra.represents the class objects as a string – it can be used for classes. The __str__ method should be defined in a way that is easy to read and outputs all the members of the class. This method is also used as a debugging tool when the members of a class need to be checked.

__ Lớp __ trong Python là gì?

__ class__ là một thuộc tính trên đối tượng đề cập đến lớp mà từ đó đối tượng được tạo.một.__Class__ # Đầu ra: b.__Class__ # Đầu ra: Sau các loại dữ liệu đơn giản, giờ đây chúng ta hãy hiểu chức năng loại và __Class__ với sự trợ giúp của lớp do người dùng xác định, con người.an attribute on the object that refers to the class from which the object was created. a. __class__ # Output: b. __class__ # Output: After simple data types, let's now understand the type function and __class__ attribute with the help of a user-defined class, Human .