Một phương thức lớp là một phương thức được chia sẻ giữa tất cả các đối tượng. Để gọi một phương thức của lớp, hãy đặt lớp đó làm đối số đầu tiên
Các phương thức của lớp có thể được gọi từ các thể hiện và từ chính lớp đó. Tất cả đều sử dụng cùng một phương pháp. Phương thức có thể sử dụng các biến và phương thức của lớp
khóa học liên quan. Hoàn thành khóa học & bài tập lập trình Python
Ví dụ
ví dụ phương pháp lớp học
Để biến một phương thức thành một classmethod, hãy thêm @classmethod trước định nghĩa phương thức. Là tham số, phương thức luôn lấy lớp
Ví dụ dưới đây định nghĩa một phương thức lớp. Phương thức lớp sau đó có thể được sử dụng bởi chính lớp đó. Trong ví dụ này, phương thức lớp sử dụng tên thuộc tính lớp
1
2
3
4
5
6
7
8
class Fruit:
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Bạn có thể sử dụng một phương thức lớp với cả đối tượng và lớp
1
2
3
4
5
6
apple = Fruit[]
berry = Fruit[]
Fruit.printName[]
apple.printName[]
berry.printName[]
Tên tham số hiện thuộc về lớp, nếu bạn thay đổi tên bằng cách sử dụng một đối tượng, nó sẽ bỏ qua điều đó. Nhưng nếu bạn làm điều đó theo lớp thì nó sẽ thay đổi, ví dụ bên dưới
1
2
3
4
5
6
7
8
9
apple.name="Apple"
Fruit.printName[]
apple.printName[]
berry.printName[]
Fruit.name="Apple"
Fruit.printName[]
apple.printName[]
berry.printName[]
viết thay thế
Thường thì ký hiệu Pythonic được sử dụng, nhưng điều này không bắt buộc.
Bạn cũng có thể sử dụng phương thức phân loại như thế này.
1
2
3
4
5
6
7
8
class Fruit:
name = 'Fruitas'
def printName[cls]:
print['The name is:', cls.name]
Fruit.printAge = classmethod[Fruit.printName]
Fruit.printAge[]
classmethod vs staticmethod
Giống như một phương thức tĩnh, một phương thức lớp không cần một đối tượng được khởi tạo
Một phương thức lớp khác với một phương thức tĩnh ở chỗ một phương thức tĩnh không biết về chính lớp đó. Trong một phương thức lớp, tham số luôn là chính lớp đó
một phương thức tĩnh không biết gì về lớp hoặc thể hiện. Bạn cũng có thể sử dụng một cuộc gọi chức năng
một phương thức lớp nhận lớp khi phương thức được gọi. Nó biết về các thuộc tính và phương thức của lớp
Lớp này cung cấp một khung đơn giản để viết trình thông dịch lệnh hướng dòng. Chúng thường hữu ích cho các khai thác thử nghiệm, công cụ quản trị và nguyên mẫu mà sau này sẽ được bao bọc trong một giao diện phức tạp hơn
Một thể hiện hoặc thể hiện của lớp con là một khung thông dịch hướng dòng. Không có lý do chính đáng để khởi tạo chính nó;
Đối số tùy chọn Completekey là tên của khóa hoàn thành; . Nếu không có Completekey và có sẵn, việc hoàn thành lệnh được thực hiện tự động
Các đối số tùy chọn stdin và stdout chỉ định các đối tượng tệp đầu vào và đầu ra mà cá thể Cmd hoặc cá thể của lớp con sẽ sử dụng cho đầu vào và đầu ra. Nếu không được chỉ định, chúng sẽ mặc định và
Nếu bạn muốn sử dụng một stdin nhất định, hãy đảm bảo đặt thuộc tính của đối tượng thành
Welcome to the turtle shell. Type help or ? to list commands. [turtle] ? Documented commands [type help ]: ======================================== bye color goto home playback record right circle forward heading left position reset undo [turtle] help forward Move the turtle forward by the specified distance: FORWARD 10 [turtle] record spiral.cmd [turtle] position Current position is 0 0 [turtle] heading Current heading is 0 [turtle] reset [turtle] circle 20 [turtle] right 30 [turtle] circle 40 [turtle] right 30 [turtle] circle 60 [turtle] right 30 [turtle] circle 80 [turtle] right 30 [turtle] circle 100 [turtle] right 30 [turtle] circle 120 [turtle] right 30 [turtle] circle 120 [turtle] heading Current heading is 180 [turtle] forward 100 [turtle] [turtle] right 90 [turtle] forward 100 [turtle] [turtle] right 90 [turtle] forward 400 [turtle] right 90 [turtle] forward 500 [turtle] right 90 [turtle] forward 400 [turtle] right 90 [turtle] forward 300 [turtle] playback spiral.cmd Current position is 0 0 Current heading is 0 Current heading is 180 [turtle] bye Thank you for using Turtle3, nếu không thì stdin sẽ bị bỏ qua
đối tượng cmd
Một thể hiện có các phương pháp sau
Cmd. cmdloop[giới thiệu=Không]Liên tục đưa ra lời nhắc, chấp nhận đầu vào, phân tích cú pháp tiền tố ban đầu khỏi đầu vào đã nhận và gửi đến các phương thức hành động, chuyển cho chúng phần còn lại của dòng làm đối số
Đối số tùy chọn là một biểu ngữ hoặc chuỗi giới thiệu sẽ được đưa ra trước lời nhắc đầu tiên [điều này sẽ ghi đè thuộc tính lớp]
Nếu mô-đun được tải, đầu vào sẽ tự động kế thừa chỉnh sửa danh sách lịch sử giống như bash [e. g. Control-P cuộn trở lại lệnh cuối cùng, Control-N chuyển tiếp tới lệnh tiếp theo, Control-F di chuyển con trỏ sang phải không phá hủy, Control-B di chuyển con trỏ sang trái không phá hủy, v.v. ]
Phần cuối của tệp trên đầu vào được trả lại dưới dạng chuỗi
Welcome to the turtle shell. Type help or ? to list commands. [turtle] ? Documented commands [type help ]: ======================================== bye color goto home playback record right circle forward heading left position reset undo [turtle] help forward Move the turtle forward by the specified distance: FORWARD 10 [turtle] record spiral.cmd [turtle] position Current position is 0 0 [turtle] heading Current heading is 0 [turtle] reset [turtle] circle 20 [turtle] right 30 [turtle] circle 40 [turtle] right 30 [turtle] circle 60 [turtle] right 30 [turtle] circle 80 [turtle] right 30 [turtle] circle 100 [turtle] right 30 [turtle] circle 120 [turtle] right 30 [turtle] circle 120 [turtle] heading Current heading is 180 [turtle] forward 100 [turtle] [turtle] right 90 [turtle] forward 100 [turtle] [turtle] right 90 [turtle] forward 400 [turtle] right 90 [turtle] forward 500 [turtle] right 90 [turtle] forward 400 [turtle] right 90 [turtle] forward 300 [turtle] playback spiral.cmd Current position is 0 0 Current heading is 0 Current heading is 180 [turtle] bye Thank you for using Turtle7
Phiên bản phiên dịch sẽ nhận ra tên lệnh
Welcome to the turtle shell. Type help or ? to list commands. [turtle] ? Documented commands [type help ]: ======================================== bye color goto home playback record right circle forward heading left position reset undo [turtle] help forward Move the turtle forward by the specified distance: FORWARD 10 [turtle] record spiral.cmd [turtle] position Current position is 0 0 [turtle] heading Current heading is 0 [turtle] reset [turtle] circle 20 [turtle] right 30 [turtle] circle 40 [turtle] right 30 [turtle] circle 60 [turtle] right 30 [turtle] circle 80 [turtle] right 30 [turtle] circle 100 [turtle] right 30 [turtle] circle 120 [turtle] right 30 [turtle] circle 120 [turtle] heading Current heading is 180 [turtle] forward 100 [turtle] [turtle] right 90 [turtle] forward 100 [turtle] [turtle] right 90 [turtle] forward 400 [turtle] right 90 [turtle] forward 500 [turtle] right 90 [turtle] forward 400 [turtle] right 90 [turtle] forward 300 [turtle] playback spiral.cmd Current position is 0 0 Current heading is 0 Current heading is 180 [turtle] bye Thank you for using Turtle8 khi và chỉ khi nó có phương thức
Welcome to the turtle shell. Type help or ? to list commands. [turtle] ? Documented commands [type help ]: ======================================== bye color goto home playback record right circle forward heading left position reset undo [turtle] help forward Move the turtle forward by the specified distance: FORWARD 10 [turtle] record spiral.cmd [turtle] position Current position is 0 0 [turtle] heading Current heading is 0 [turtle] reset [turtle] circle 20 [turtle] right 30 [turtle] circle 40 [turtle] right 30 [turtle] circle 60 [turtle] right 30 [turtle] circle 80 [turtle] right 30 [turtle] circle 100 [turtle] right 30 [turtle] circle 120 [turtle] right 30 [turtle] circle 120 [turtle] heading Current heading is 180 [turtle] forward 100 [turtle] [turtle] right 90 [turtle] forward 100 [turtle] [turtle] right 90 [turtle] forward 400 [turtle] right 90 [turtle] forward 500 [turtle] right 90 [turtle] forward 400 [turtle] right 90 [turtle] forward 300 [turtle] playback spiral.cmd Current position is 0 0 Current heading is 0 Current heading is 180 [turtle] bye Thank you for using Turtle9. Trong trường hợp đặc biệt, một dòng bắt đầu bằng ký tự
class Fruit:30 được gửi đến phương thức
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
class Fruit:31. Như một trường hợp đặc biệt khác, một dòng bắt đầu bằng ký tự
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
class Fruit:32 được gửi đến phương thức
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
class Fruit:33 [nếu phương thức đó được xác định]
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Phương thức này sẽ trả về khi phương thức trả về giá trị thực. Đối số dừng là giá trị trả về từ phương thức
class Fruit:36 tương ứng của lệnh
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Nếu tính năng hoàn thành được bật, việc hoàn thành các lệnh sẽ được thực hiện tự động và việc hoàn thành các lệnh args được thực hiện bằng cách gọi
class Fruit:37 với các đối số là văn bản, dòng, begidx và endidx. văn bản là tiền tố chuỗi mà chúng tôi đang cố khớp. tất cả các trận đấu trở lại phải bắt đầu với nó. dòng là dòng đầu vào hiện tại đã loại bỏ khoảng trắng ở đầu, begidx và endidx là chỉ mục bắt đầu và kết thúc của văn bản tiền tố, có thể được sử dụng để cung cấp cách hoàn thành khác nhau tùy thuộc vào vị trí của đối số
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Tất cả các lớp con kế thừa một
class Fruit:31 được xác định trước. Phương thức này, được gọi với đối số
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
100, gọi phương thức tương ứng
2
3
4
5
6
101 và nếu không có, in chuỗi tài liệu của
2
3
4
5
6
102, nếu có. Không có đối số,
2
3
4
5
6
class Fruit:31 liệt kê tất cả các chủ đề trợ giúp có sẵn [nghĩa là tất cả các lệnh có phương thức
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
104 tương ứng hoặc các lệnh có chuỗi tài liệu] và cũng liệt kê mọi lệnh không có giấy tờ
2
3
4
5
6
Giải thích đối số như thể nó đã được gõ để đáp lại lời nhắc. Điều này có thể bị ghi đè, nhưng thông thường không cần phải như vậy; . Giá trị trả về là một cờ cho biết liệu trình thông dịch có nên dừng phiên dịch các lệnh hay không. Nếu có một phương thức
class Fruit:36 cho lệnh str, giá trị trả về của phương thức đó sẽ được trả về, nếu không, giá trị trả về từ phương thức sẽ được trả vềCmd. dòng trống[]
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Phương thức được gọi khi một dòng trống được nhập để đáp lại lời nhắc. Nếu phương thức này không bị ghi đè, nó sẽ lặp lại lệnh không trống cuối cùng được nhập
Cmd. mặc định[dòng]Phương thức được gọi trên một dòng đầu vào khi tiền tố lệnh không được nhận dạng. Nếu phương thức này không bị ghi đè, nó sẽ in một thông báo lỗi và trả về
Cmd. completedefault[văn bản , dòng, begidx, endidx]Phương thức được gọi để hoàn thành một dòng đầu vào khi không có phương thức
109 dành riêng cho lệnh. Theo mặc định, nó trả về một danh sách trốngCmd. cột[danh sách , băng thông hiển thị=80]
2
3
4
5
6
Phương thức được gọi để hiển thị danh sách các chuỗi dưới dạng một tập hợp các cột nhỏ gọn. Mỗi cột chỉ rộng khi cần thiết. Các cột được phân tách bằng hai dấu cách để dễ đọc
Cmd. precmd[dòng]Phương thức hook được thực thi ngay trước khi dòng lệnh được diễn giải, nhưng sau khi dấu nhắc đầu vào được tạo và phát hành. Phương thức này còn sơ khai trong ; . Giá trị trả về được sử dụng làm lệnh sẽ được thực thi bởi phương thức;
Cmd. postcmd[dừng , dòng]Phương thức hook được thực thi ngay sau khi gửi lệnh xong. Phương thức này còn sơ khai trong ; . dòng là dòng lệnh đã được thực thi và dừng là một cờ cho biết liệu việc thực thi có bị chấm dứt hay không sau khi gọi đến ; . Giá trị trả về của phương thức này sẽ được sử dụng làm giá trị mới cho cờ nội bộ tương ứng với dừng;
Cmd. vòng lặp trước[]Phương thức hook được thực thi một lần khi được gọi. Phương thức này còn sơ khai trong ;
Cmd. vòng lặp sau[]Phương thức hook được thực hiện một lần khi sắp trở lại. Phương thức này còn sơ khai trong ;
Thể hiện của các lớp con có một số biến thể hiện công khai
Cmd. nhắc nhởLời nhắc được đưa ra để thu hút đầu vào
Cmd. ký tự nhận dạngChuỗi ký tự được chấp nhận cho tiền tố lệnh
Cmd. lastcmdTiền tố lệnh không trống cuối cùng được nhìn thấy
Một danh sách các dòng đầu vào xếp hàng đợi. Danh sách cmdqueue được kiểm tra khi cần đầu vào mới;
Cmd. giới thiệuMột chuỗi để phát hành dưới dạng giới thiệu hoặc biểu ngữ. Có thể bị ghi đè bằng cách đưa ra một đối số cho phương thức
Cmd. doc_headerTiêu đề phát hành nếu đầu ra trợ giúp có phần dành cho các lệnh được ghi lại
Cmd. misc_headerTiêu đề phát hành nếu đầu ra trợ giúp có một phần dành cho các chủ đề trợ giúp linh tinh [nghĩa là có các phương thức
104 mà không có phương thức
2
3
4
5
6
class Fruit:36 tương ứng]Cmd. undoc_header
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Tiêu đề phát hành nếu đầu ra trợ giúp có một phần dành cho các lệnh không có tài liệu [nghĩa là có các phương thức
class Fruit:36 mà không có phương thức
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
104 tương ứng]Cmd. thước kẻ
2
3
4
5
6
Ký tự được sử dụng để vẽ các đường phân cách dưới tiêu đề thông báo trợ giúp. Nếu trống, không có đường kẻ nào được vẽ. Nó mặc định là
107Cmd. use_rawinput
2
3
4
5
6
Một lá cờ, mặc định là true. Nếu đúng, sử dụng để hiển thị dấu nhắc và đọc lệnh tiếp theo; . [Điều này có nghĩa là bằng cách nhập , trên các hệ thống hỗ trợ nó, trình thông dịch sẽ tự động hỗ trợ chỉnh sửa dòng giống như Emacs và tổ hợp phím lịch sử lệnh. ]
Ví dụ Cmd
Mô-đun này chủ yếu hữu ích để xây dựng các trình bao tùy chỉnh cho phép người dùng làm việc với chương trình một cách tương tác
Phần này trình bày một ví dụ đơn giản về cách xây dựng trình bao xung quanh một số lệnh trong mô-đun
Các lệnh rùa cơ bản như được thêm vào một lớp con với phương thức có tên là
107. Đối số được chuyển đổi thành một số và được gửi đến mô-đun rùa. Chuỗi tài liệu được sử dụng trong tiện ích trợ giúp do trình bao cung cấp
2
3
4
5
6
Ví dụ này cũng bao gồm một cơ sở ghi và phát lại cơ bản được triển khai với phương thức chịu trách nhiệm chuyển đổi đầu vào thành chữ thường và viết các lệnh vào một tệp. Phương thức
109 đọc tệp và thêm các lệnh đã ghi vào
2
3
4
5
6
apple = Fruit[]60 để phát lại ngay lập tức
berry = Fruit[]
Fruit.printName[]
apple.printName[]
berry.printName[]
class Fruit:2
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Đây là một phiên mẫu với mai rùa hiển thị các chức năng trợ giúp, sử dụng các dòng trống để lặp lại các lệnh cũng như tiện ích ghi và phát lại đơn giản