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 definedTô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
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 và 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