python中的实例是什么意思_在Python中,什么是“类方法”和“实例方法”?

在Python中,什么是“类方法”和“实例方法”?

“实例方法”使用实例中包含的信息来计算要返回的值(或要执行的副作用)。这些很常见。

“类方法”使用有关类的信息(而不是该类的实例)来影响其功能(它们通常用于创建新实例作为替代构造函数,因此并不常见)。

“静态方法”不使用有关类或实例的任何信息来计算其功能。为了方便起见,通常只在课堂上讲。(因此,它们也不是很常见。)

X的函数

记住数学课,“ y是x的函数f(x)吗?” 让我们在代码中应用它:

y=function(x)

以上所隐含的是,由于x可能会更改,所以y更改时可能会x更改。这就是说“ y是”的功能时的x意思。

将什么y是时候z是1?2?'FooBarBaz'?

y不是的函数z,因此z可以是任何东西,并且假设我们function是纯函数,则不影响该函数的结果。(如果它z作为全局变量访问,则它不是纯函数-这就是函数纯净的含义。)

阅读以下说明时,请牢记以上几点:

实例方法

一个实例方法是函数是一个函数的一个实例。该函数隐式地接受该实例作为其参数,并且该实例由该函数使用以确定该函数的输出。

实例方法的内置示例为str.lower:

>>>'ABC'.lower()'abc'

str.lower 在字符串的实例上调用,并使用实例中包含的信息确定要返回的新字符串。

类方法:

记住,在Python中,一切都是对象。这意味着该类是一个对象,并且可以作为参数传递给函数。

一类方法是一个函数,它是一个函数的类。它接受类作为其参数。

一个内置的示例是dict.fromkeys:

>>>dict.fromkeys('ABC'){'C':None,'B':None,'A':None}

该函数隐式地知道其自己的类,该函数使用该类来影响该函数的输出,并从可迭代对象中创建该类的新类。使用相同的方法时,OrderedDict会对此进行演示:

>>>fromcollectionsimportOrderedDict>>>OrderedDict.fromkeys('ABC')OrderedDict([('A',None),('B',None),('C',None)])

class方法使用有关类的信息(而不是该类的实例)来影响要返回的类的类型。

静态方法

您提到了“不知道其类”的方法-这是Python中的静态方法。它只是为了方便而附加到类对象上。它可以选择是另一个模块中的单独函数,但其​​调用签名将相同。

静态方法既不是类也不是对象的函数。

静态方法的内置示例是Python 3中的str.maketrans。

>>>str.maketrans('abc','bca'){97:98,98:99,99:97}

给定几个参数,它将创建一个字典,而不是其类的函数。

这很方便,因为str它始终在全局名称空间中可用,因此您可以轻松地将其与translation函数一起使用:

>>>'abracadabra'.translate(str.maketrans('abc','bca'))'bcrbabdbcrb'

在Python 2中,您必须从string模块访问它:

>>>'abracadabra'.translate(str.maketrans('abc','bca'))Traceback(most recent call last):File"",line1,inAttributeError:type object'str'has no attribute'maketrans'>>>importstring>>>'abracadabra'.translate(string.maketrans('abc','bca'))'bcrbabdbcrb'

classAClass(object):"""In Python, a class may have several types of methods:instance methods, class methods, and static methods"""defan_instance_method(self,x,y,z=None):"""this is a function of the instance of the objectself is the object's instance"""returnself.a_class_method(x,y)@classmethoddefa_class_method(cls,x,y,z=None):"""this is a function of the class of the objectcls is the object's class"""returncls.a_static_method(x,y,z=z)@staticmethoddefa_static_method(x,y,z=None):"""this is neither a function of the instance or class towhich it is attached"""returnx,y,z

让我们实例化:

>>>instance=AClass()

现在,实例可以调用所有方法:

>>>instance.an_instance_method('x','y')('x','y',None)>>>instance.a_static_method('x','y')('x','y',None)>>>instance.a_class_method('x','y')('x','y',None)

但是该类通常不打算调用该实例方法,尽管希望它可以调用其他方法:

>>>AClass.a_class_method('x','y')('x','y',None)>>>AClass.a_static_method('x','y')('x','y',None)>>>AClass.an_instance_method('x','y')Traceback(most recent call last):File"",line1,inTypeError:an_instance_method()missing1required positional argument:'y'

您必须显式传递实例才能调用实例方法:

>>>AClass.an_instance_method(instance,'x','y')('x','y',None)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值