什么是Python中的“方法”?

2024-04-24 13:27:59 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

在Python中,方法是对给定对象可用的函数,因为对象的类型是。

例如,如果创建my_list = [1, 2, 3],则append方法可以应用于my_list,因为它是一个Python列表:my_list.append(4)。所有列表都有一个append方法,因为它们都是列表。

另一个例子是,如果创建my_string = 'some lowercase text',那么upper方法可以应用于my_string,因为它是一个Python字符串:my_string.upper()

列表没有upper方法,字符串也没有append方法。为什么?因为方法只存在于为特定对象类型显式定义的特定对象中,而Python的开发人员(到目前为止)已经决定这些特定对象不需要这些特定方法。

要调用方法,格式为object_name.method_name(),该方法的任何参数都列在括号中。该方法隐式地作用于被命名的对象,因此有些方法没有任何声明的参数,因为对象本身是唯一必需的参数。例如,my_string.upper()没有任何列出的参数,因为唯一需要的参数是对象本身,my_string

一个常见的混淆点是:

import math
math.sqrt(81)

sqrtmath对象的方法吗?不。这就是从math模块调用sqrt函数的方式。使用的格式是module_name.function_name(),而不是object_name.method_name()。一般来说,区分这两种格式的唯一方法(可视化的)是查看代码的其余部分,看看在句点(mathmy_listmy_string)之前的部分是否定义为对象或模块。

方法是以类实例作为其第一个参数的函数。方法是类的成员。

class C:
    def method(self, possibly, other, arguments):
        pass # do something here

因为您想知道它在Python中的具体含义,所以可以区分绑定方法和未绑定方法。在Python中,所有函数(以及方法)都是可以传递和“播放”的对象。因此,unbound方法和bound方法的区别是:

1)绑定方法

# Create an instance of C and call method()
instance = C()

print instance.method # prints '<bound method C.method of <__main__.C instance at 0x00FC50F8>>'
instance.method(1, 2, 3) # normal method call

f = instance.method
f(1, 2, 3) # method call without using the variable 'instance' explicitly

绑定方法是属于类实例的方法。在本例中,instance.method绑定到名为instance的实例。每次调用绑定方法时,都会自动将实例作为第一个参数传递,按照惯例称为self

2)解除绑定的方法

print C.method # prints '<unbound method C.method>'
instance = C()
C.method(instance, 1, 2, 3) # this call is the same as...
f = C.method
f(instance, 1, 2, 3) # ..this one...

instance.method(1, 2, 3) # and the same as calling the bound method as you would usually do

当您访问C.method(类中的方法而不是实例中的方法)时,会得到一个未绑定的方法。如果要调用它,则必须将实例作为第一个参数传递,因为该方法绑定到任何实例时都是而不是

知道这一区别后,您可以将函数/方法用作对象,就像传递方法一样。作为一个示例用例,假设一个API允许您定义回调函数,但是您希望提供一个方法作为回调函数。没问题,只要把self.myCallbackMethod作为回调传递,它就会自动被调用,实例作为第一个参数。在C++等静态语言中(或者只使用欺骗),这是不可能的。

希望你明白我的意思;)我想这就是你应该知道的方法基础知识。您还可以阅读更多关于classmethodstaticmethod装饰器的内容,但这是另一个主题。

它是一个类的成员函数:

class C:
    def my_method(self):
        print "I am a C"

c = C()
c.my_method()  # Prints "I am a C"

就这么简单!

(还有一些其他类型的方法,允许您控制类和函数之间的关系。但我从你的问题中猜到,你不是在问这个问题,而是在问基本问题。)

相关问题 更多 >