Hướng dẫn do static methods have access to class variables python? - các phương thức tĩnh có quyền truy cập vào các biến lớp python không?

Đâ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

83.5K181 Huy hiệu vàng435 Huy hiệu bạc706 Huy hiệu đồng181 gold badges435 silver badges706 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

Fred Foofred FooFred Foo

348K74 Huy hiệu vàng726 Huy hiệu bạc825 Huy hiệu Đồng74 gold badges726 silver badges825 bronze badges

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

Fred Foofred Foo

348K74 Huy hiệu vàng726 Huy hiệu bạc825 Huy hiệu Đồng

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

Daydreamerdaydreamerdaydreamer

83.5K181 Huy hiệu vàng435 Huy hiệu bạc706 Huy hiệu đồng181 gold badges435 silver badges706 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:

.

return __class__.ALREADY_INVITED_MESSAGE
        return __class__.INVITE_MESSAGE

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

Fred Foofred FooOct 14, 2021 at 1:50

1

348K74 Huy hiệu vàng726 Huy hiệu bạc825 Huy hiệu Đồng

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

Fred Foofred FooMaxime Lorant

348K74 Huy hiệu vàng726 Huy hiệu bạc825 Huy hiệu Đồng19 gold badges84 silver badges96 bronze badges

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

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:

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

bạn có thể đọc nó ở đâyApr 7, 2019 at 6:20

Phương pháp tĩnh có thể truy cập các biến lớp 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.

Tôi có thể sử dụng phương pháp tĩnh bên trong lớp python không?

Các phương thức tĩnh trong Python cực kỳ giống với các phương thức cấp lớp Python, sự khác biệt là một phương thức tĩnh bị ràng buộc với một lớp chứ không phải là các đối tượng cho lớp đó.Điều này có nghĩa là một phương thức tĩnh có thể được gọi mà không có đối tượng cho lớp đó.a static method is bound to a class rather than the objects for that class. This means that a static method can be called without an object for that class.

Phương pháp tĩnh có thể được truy cập bên ngoài lớp không?

Nếu đó là một phương pháp tĩnh công khai, bạn có thể sử dụng nó từ bất cứ nơi nào bên ngoài lớp.Nếu đó là gói riêng [mặc định], thì bạn chỉ có thể sử dụng nó trong gói đó.. If that is package-private [default], then you can use only it within that package.

Loại biến nào không thể được sử dụng trong phương pháp tĩnh?

Cụ thể, các phương thức tĩnh chỉ có thể sử dụng các biến tĩnh và gọi các phương thức tĩnh, chúng không thể truy cập trực tiếp các biến hoặc phương thức thể hiện mà không cần tham chiếu đối tượng.instance variables or methods directly, without an object reference.

Bài Viết Liên Quan

Chủ Đề