Python chạy phương thức lớp từ dòng lệnh

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

lớp cmd. Cmd[completekey='tab' , stdin=Không có , stdout=Không có]

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 Turtle
3, 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 Turtle
7

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 Turtle
8 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 Turtle
9. Trong trường hợp đặc biệt, một dòng bắt đầu bằng ký tự
class Fruit:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
30 được gửi đến phương thức
class Fruit:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
31. Như một trường hợp đặc biệt khác, một dòng bắt đầu bằng ký tự
class Fruit:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
32 được gửi đến phương thức
class Fruit:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
33 [nếu phương thức đó được xác định]

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:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
36 tương ứng của lệnh

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:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
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ố

Tất cả các lớp con kế thừa một

class Fruit:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
31 được xác định trước. Phương thức này, được gọi với đối số
1
2
3
4
5
6
00, gọi phương thức tương ứng
1
2
3
4
5
6
01 và nếu không có, in chuỗi tài liệu của
1
2
3
4
5
6
02, nếu có. Không có đối số,
class Fruit:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
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
1
2
3
4
5
6
04 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ờ

Cmd. onecmd[str]

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:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
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[]

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

1
2
3
4
5
6
09 dành riêng cho lệnh. Theo mặc định, nó trả về một danh sách trống

Cmd. cột[danh sách , băng thông hiển thị=80]

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ạng

Chuỗi ký tự được chấp nhận cho tiền tố lệnh

Cmd. lastcmd

Tiền tố lệnh không trống cuối cùng được nhìn thấy

Cmd. cmdqueue

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ệu

Mộ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_header

Tiê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_header

Tiê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

1
2
3
4
5
6
04 mà không có phương thức
class Fruit:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
36 tương ứng]

Cmd. undoc_header

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:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
36 mà không có phương thức
1
2
3
4
5
6
04 tương ứng]

Cmd. thước kẻ

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à

1
2
3
4
5
6
07

Cmd. use_rawinput

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à

1
2
3
4
5
6
07. Đố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

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

1
2
3
4
5
6
09 đọc tệp và thêm các lệnh đã ghi vào
apple = Fruit[]
berry = Fruit[]

Fruit.printName[]
apple.printName[]
berry.printName[]
60 để phát lại ngay lập tức

class Fruit:
name = 'Fruitas'

@classmethod
def printName[cls]:
print['The name is:', cls.name]

Fruit.printName[]
2

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

Bạn có thể gọi một lớp trong hàm Python không?

Trong Python, các lớp, hàm và thể hiện của các lớp đều có thể được sử dụng làm “các hàm gọi được” .

Python __ chính __ là gì?

__main__ là tên của môi trường chạy mã cấp cao nhất . “Mã cấp cao nhất” là mô-đun Python do người dùng chỉ định đầu tiên bắt đầu chạy. Đó là "cấp cao nhất" vì nó nhập tất cả các mô-đun khác mà chương trình cần. Đôi khi “mã cấp cao nhất” được gọi là điểm vào ứng dụng.

Chủ Đề