Hướng dẫn python self is not defined - bản thân python không được xác định

Chỉ mới bắt đầu học Python và tôi chắc chắn đó là một câu hỏi ngu ngốc nhưng tôi đang thử một cái gì đó như thế này:

    def setavalue(self):
        self.myname = "harry"

    def printaname():
        print "Name", self.myname     

    def main():
        printname()




    if __name__ == "__main__":
        main() 

Lỗi tôi nhận được là:

 NameError: global name 'self' is not defined

Tôi đã thấy cách sử dụng câu lệnh tự để tham khảo các biến của các phương thức khác nhau trong một số mã tôi đọc đang hoạt động tốt.

Cảm ơn đã giúp đỡ

Hỏi ngày 11 tháng 8 năm 2011 lúc 10:41Aug 11, 2011 at 10:41

Hướng dẫn python self is not defined - bản thân python không được xác định

1

self là sự tự tham khảo trong một lớp. Mã của bạn không nằm trong một lớp, bạn chỉ có các chức năng được xác định. Bạn phải bọc các phương pháp của bạn trong một lớp, như dưới đây. Để sử dụng phương thức main(), trước tiên bạn phải khởi tạo một đối tượng của lớp và gọi hàm trên đối tượng.

Hơn nữa, chức năng của bạn setavalue nên có trong

 NameError: global name 'self' is not defined
0, phương thức được gọi là khi khởi tạo một đối tượng. Bước tiếp theo bạn có thể nên xem là cung cấp tên như một đối số cho init, để bạn có thể tạo các đối tượng được đặt tên tùy ý của lớp
 NameError: global name 'self' is not defined
1;)

class Name:
    def __init__(self):
        self.myname = "harry"

    def printaname(self):
        print "Name", self.myname     

    def main(self):
        self.printaname()

if __name__ == "__main__":
    objName = Name()
    objName.main() 

Hãy xem chương Lớp học của Hướng dẫn Python, AT lặn vào Python để tham khảo thêm.

Đã trả lời ngày 11 tháng 8 năm 2011 lúc 10:43Aug 11, 2011 at 10:43

JacobjacobJacob

40.6K6 Huy hiệu vàng76 Huy hiệu bạc81 Huy hiệu Đồng6 gold badges76 silver badges81 bronze badges

Trong Python self là tên thông thường được đặt cho đối số đầu tiên của các phương thức thể hiện của các lớp, luôn luôn là ví dụ mà phương thức được gọi là:

class A(object):
  def f(self):
    print self

a = A()
a.f()

Sẽ cung cấp cho bạn một cái gì đó như

<__main__.A object at 0x02A9ACF0>

Đã trả lời ngày 11 tháng 8 năm 2011 lúc 10:48Aug 11, 2011 at 10:48

Nicola Musattinicola MusattiNicola Musatti

17.4K2 Huy hiệu vàng47 Huy hiệu bạc53 Huy hiệu đồng2 gold badges47 silver badges53 bronze badges

Nếu bạn đến từ một ngôn ngữ như Java có thể bạn có thể thực hiện một số loại liên kết giữa self

 NameError: global name 'self' is not defined
4. self sẽ là tham chiếu đến đối tượng được gọi là phương thức đó nhưng bạn cần khai báo một lớp trước. Thử:

class MyClass(object)

    def __init__(self)
        #equivalent of constructor, can do initialisation and stuff


    def setavalue(self):
        self.myname = "harry"

    def printaname(self):
        print "Name", self.myname     

def main():
    #Now since you have self as parameter you need to create an object and then call the method for that object.
    my_obj = MyClass()
    my_obj.setavalue() #now my_obj is passed automatically as the self parameter in your method declaration
    my_obj.printname()


if __name__ == "__main__":
    main()

Bạn có thể thử một số hướng dẫn cơ bản của Python như ở đây: Hướng dẫn Python

Đã trả lời ngày 11 tháng 8 năm 2011 lúc 10:50Aug 11, 2011 at 10:50

BogdanbogdanBogdan

7.8516 huy hiệu vàng45 Huy hiệu bạc64 Huy hiệu đồng6 gold badges45 silver badges64 bronze badges

Nó phải là một cái gì đó như:

class Person:
   def setavalue(self, name):         
      self.myname = name      
   def printaname(self):         
      print "Name", self.myname           

def main():
   p = Person()
   p.setavalue("harry")
   p.printaname()  

Đã trả lời ngày 11 tháng 8 năm 2011 lúc 10:50Aug 11, 2011 at 10:50

BogdanbogdanJiri Kriz

7.8516 huy hiệu vàng45 Huy hiệu bạc64 Huy hiệu đồng3 gold badges28 silver badges36 bronze badges

Nó phải là một cái gì đó như:

Jiri Krizjiri Kriz

Đã trả lời ngày 11 tháng 8 năm 2011 lúc 10:48Aug 11, 2011 at 10:48

Nicola Musattinicola MusattiKeith

17.4K2 Huy hiệu vàng47 Huy hiệu bạc53 Huy hiệu đồng10 gold badges56 silver badges75 bronze badges

Tại sao bản thân không làm việc trong Python?

Trình tự xây dựng lớp Python Nếu chúng ta có một biến bên trong một phương thức, trong trường hợp này, bản thân sẽ không hoạt động.Biến đó chỉ tồn tại trong khi phương pháp đó đang thực thi và do đó là duy nhất cho phương pháp đó.Để tạo các trường hoặc biến toàn cầu cho cả lớp, chúng ta phải khai báo chúng bên ngoài các phương thức lớp.If we have a variable inside a method, in this case, self will not work. That variable exists only while that method is executing and is thus unique to that method. To create global fields or variables for the whole class, we must declare them outside of the class methods.

Tự () trong Python là gì?

Tham số tự là tham chiếu đến thể hiện hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớp.a reference to the current instance of the class, and is used to access variables that belongs to the class.

Bạn có thể tự đặt mình trong Python không?

Tự chỉ là một tham chiếu đến thể hiện hiện tại trong phương thức.Bạn không thể thay đổi thể hiện của mình bằng cách tự đặt bản thân.Lưu câu trả lời này.You can't change your instance by setting self . Save this answer.