python的类和实例_关于python:类和实例方法的区别

我正在阅读PEP 0008(样式指南),我注意到它建议使用self作为实例方法中的第一个参数,而cls作为类方法中的第一个参数。

我已经使用并编写了一些类,但我从未遇到过类方法(好吧,一个将cls作为参数传递的方法)。有人能给我举几个例子吗?

谢谢!

好吧——我会尽量完善我的问题。谢谢!

嗯,这不是复制品。虽然性质相似,但这篇文章关注的是Pythic解决方案,而另一篇则使用Java的引用,并着重于该理论。A)并不是每个人都知道Java和B)有时应用比一个简洁的理论解释要好。我个人认为"关联答案"不是答案。这里张贴的答案是。同时,在一起工作,可能会产生更好的理解,缺乏明确的方向,并造成进一步的混乱。

同意-我重新打开了问题

实例方法

创建实例方法时,第一个参数始终是self。您可以随意命名它,但其含义总是相同的,您应该使用self,因为它是命名约定。self通常在调用实例方法时是hiddenly传递的;它表示调用该方法的实例。

下面是一个名为Inst的类的示例,该类有一个名为introduce()的实例方法:

1

2

3

4

5

6

7class Inst:

def __init__(self, name):

self.name = name

def introduce(self):

print("Hello, I am %s, and my name is" %(self, self.name))

现在要调用这个方法,我们首先需要创建一个类的实例。一旦我们有了一个实例,我们就可以在它上面调用introduce(),该实例将自动作为self传递:

1

2

3

4

5

6myinst = Inst("Test Instance")

otherinst = Inst("An other instance")

myinst.introduce()

# outputs: Hello, I am , and my name is Test Instance

otherinst.introduce()

# outputs: Hello, I am , and my name is An other instance

如您所见,我们没有传递参数self,它是通过句点运算符hiddenly传递的;我们调用Inst类的实例方法introduce,参数为myinst或otherinst。这意味着我们可以调用Inst.introduce(myinst),得到完全相同的结果。类方法

类方法的思想与实例方法非常相似,唯一的区别是,我们现在将类本身作为第一个参数传递,而不是将实例hiddenly作为第一个参数传递。

1

2

3

4

5class Cls:

@classmethod

def introduce(cls):

print("Hello, I am %s!" %cls)

因为我们只向方法传递一个类,所以不涉及实例。这意味着我们根本不需要实例,我们像调用静态函数一样调用类方法:

1

2Cls.introduce() # same as Cls.introduce(Cls)

# outputs: Hello, I am

请注意,Cls是隐藏传递的,所以我们也可以说Cls.introduce(Inst)和get output "Hello, I am。当我们从Cls继承类时,这尤其有用:

1

2

3

4

5class SubCls(Cls):

pass

SubCls.introduce()

# outputs: Hello, I am

在第一个示例中,您不是指x.p()而不是print(x)?

@AMO-EJ1良好的捕获,已修复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值