Hướng dẫn how do you access a variable in a static method in python? - làm thế nào để bạn truy cập một biến trong một phương thức tĩnh trong python?

Đây là mã của tôi trông như thế nào

class InviteManager[]:
    ALREADY_INVITED_MESSAGE = "You are already on our invite list"
    INVITE_MESSAGE = "Thank you! we will be in touch soon"

    @staticmethod
    @missing_input_not_allowed
    def invite[email]:
        try:
            db.session.add[Invite[email]]
            db.session.commit[]
        except IntegrityError:
            return ALREADY_INVITED_MESSAGE
        return INVITE_MESSAGE

Khi tôi chạy các bài kiểm tra của mình, tôi thấy

NameError: global name 'INVITE_MESSAGE' is not defined

Làm thế nào tôi có thể truy cập INVITE_MESSAGE bên trong @staticmethod?

Hỏi ngày 25 tháng 8 năm 2013 lúc 16:47Aug 25, 2013 at 16:47

Daydreamerdaydreamerdaydreamer

82.7K178 Huy hiệu vàng433 Huy hiệu bạc699 Huy hiệu đồng178 gold badges433 silver badges699 bronze badges

0

Bạn có thể truy cập nó dưới dạng InviteManager.INVITE_MESSAGE, nhưng giải pháp sạch hơn là thay đổi phương thức tĩnh thành phương thức lớp:

@classmethod
@missing_input_not_allowed
def invite[cls, email]:
    return cls.INVITE_MESSAGE

.

Đã trả lời ngày 25 tháng 8 năm 2013 lúc 16:51Aug 25, 2013 at 16:51

3

Try:

class InviteManager[]:
    ALREADY_INVITED_MESSAGE = "You are already on our invite list"
    INVITE_MESSAGE = "Thank you! we will be in touch soon"

    @staticmethod
    @missing_input_not_allowed
    def invite[email]:
        try:
            db.session.add[Invite[email]]
            db.session.commit[]
        except IntegrityError:
            return InviteManager.ALREADY_INVITED_MESSAGE
        return InviteManager.INVITE_MESSAGE

NameError: global name 'INVITE_MESSAGE' is not defined
0 nằm trong phạm vi của nó là staticmethods.

Đã trả lời ngày 25 tháng 8 năm 2013 lúc 16:51Aug 25, 2013 at 16:51

NameError: global name 'INVITE_MESSAGE' is not defined
0 nằm trong phạm vi của nó là staticmethods.Maciej Gol

Maciej Golmaciej Gol4 gold badges32 silver badges50 bronze badges

14,9K4 Huy hiệu vàng32 Huy hiệu bạc 50 Huy hiệu Đồng

class InviteManager[]:
    ALREADY_INVITED_MESSAGE = "You are already on our invite list"
    INVITE_MESSAGE = "Thank you! we will be in touch soon"

    @classmethod
    @missing_input_not_allowed
    def invite[cls, email]:
        try:
            db.session.add[Invite[email]]
            db.session.commit[]
        except IntegrityError:
            return cls.ALREADY_INVITED_MESSAGE
        return cls.INVITE_MESSAGE

Chỉ nhận ra, tôi cần

NameError: global name 'INVITE_MESSAGE' is not defined
1

Đã trả lời ngày 25 tháng 8 năm 2013 lúc 16:51Aug 25, 2013 at 16:51

Daydreamerdaydreamerdaydreamer

82.7K178 Huy hiệu vàng433 Huy hiệu bạc699 Huy hiệu đồng178 gold badges433 silver badges699 bronze badges

Bạn có thể truy cập nó dưới dạng InviteManager.INVITE_MESSAGE, nhưng giải pháp sạch hơn là thay đổi phương thức tĩnh thành phương thức lớp:

Đã trả lời ngày 25 tháng 8 năm 2013 lúc 16:51Aug 25, 2013 at 16:51

NameError: global name 'INVITE_MESSAGE' is not defined
0 nằm trong phạm vi của nó là staticmethods.Maxime Lorant

Maciej Golmaciej Gol19 gold badges84 silver badges96 bronze badges

14,9K4 Huy hiệu vàng32 Huy hiệu bạc 50 Huy hiệu Đồng

Chỉ nhận ra, tôi cần

NameError: global name 'INVITE_MESSAGE' is not defined
1self keyword as self keyword is used to represent instance of the class or to use instance variables of the class. In fact one use class_name, see below example:

bạn có thể đọc nó ở đây

Bạn có thể truy cập vào các thuộc tính của bạn với InviteManager.INVITE_MESSAGE

NameError: global name 'INVITE_MESSAGE' is not defined
3 mà không thay đổi bất cứ điều gì trong tuyên bố của họ.Apr 7, 2019 at 6:20

Maxime LorantMaxime Lorant

32,8K19 Huy hiệu vàng84 Huy hiệu bạc96 Huy hiệu đồng

return __class__.ALREADY_INVITED_MESSAGE
        return __class__.INVITE_MESSAGE

Đơn giản, hiểu khái niệm về các biến/phương thức cấp lớp và các biến/phương thức cấp độ thể hiện.

Mặc dù làm việc với các phương thức tĩnh, bạn sẽ không sử dụng từ khóa tự làm từ khóa tự được sử dụng để biểu diễn thể hiện của lớp hoặc sử dụng các biến thể hiện của lớp. Trong thực tế, một người sử dụng class_name, xem ví dụ bên dưới:Oct 14, 2021 at 1:50

1

Làm thế nào để bạn truy cập một biến tĩnh trong Python?

Chúng ta có thể truy cập trực tiếp một biến tĩnh trong Python bằng cách sử dụng cùng một đối tượng lớp với toán tử DOT.using the same class object with a dot operator.

Làm thế nào để bạn truy cập một biến trong một phương thức tĩnh?

Bằng cách sử dụng các biến tĩnh, một bản sao được chia sẻ giữa tất cả các trường hợp của lớp và chúng có thể được truy cập trực tiếp bằng tên lớp và không yêu cầu bất kỳ trường hợp nào.Phương thức tĩnh tương tự thuộc về lớp chứ không phải thể hiện và nó chỉ có thể truy cập các biến tĩnh nhưng không phải là biến không tĩnh.they can be accessed directly by class name and don't require any instance. The Static method similarly belongs to the class and not the instance and it can access only static variables but not non-static variables.

Chúng ta có thể truy cập biến thể hiện trong phương thức tĩnh Python không?

Một phương thức tĩnh không thể truy cập các biến thể hiện và phương thức thể hiện của lớp, bởi vì một phương thức tĩnh có thể được gọi ngay cả khi không có đối tượng nào của lớp được khởi tạo.Vì lý do tương tự, tham chiếu này không thể được sử dụng trong một phương thức tĩnh., because a static method can be called even when no objects of the class have been instantiated. For the same reason, the this reference cannot be used in a static method.

Chúng ta có thể truy cập biến tĩnh trong không

Trong phương thức tĩnh, phương thức chỉ có thể truy cập chỉ các thành viên dữ liệu tĩnh và phương thức tĩnh của một lớp khác hoặc cùng một lớp nhưng không thể truy cập các phương thức và biến không tĩnh.cannot access non-static methods and variables.

Bài Viết Liên Quan

Chủ Đề