【问题标题】:Python: Method M is a property of Class C; How do I use it inside of C?Python:方法 M 是 C 类的属性;如何在 C 中使用它?
【发布时间】:2016-10-22 03:16:26
【问题描述】:

我想在定义它的同一个类中使用一个基本函数(方法)。

我不知道为什么,但它与self 有关系。

这行得通:

class What(object):
    def worksOnlyOutside(self, a):
        print a ** 2

    def worksOnlyInside(b):
        print b ** 3

    worksOnlyInside(2)
        #prints out 8

What().worksOnlyOutside(3)
    #prints out 9

这不起作用:

class What(object):
    def worksOnlyOutside(self, a):
        print a ** 2

    def worksOnlyInside(b):
        print b ** 3

    worksOnlyOutside(2)
        #prints out "TypeError: worksOnlyOutside() takes exactly 2 arguments (1 given)"

What().worksOnlyInside(3)
    #prints out "TypeError: worksOnlyInside() takes exactly 1 argument (2 given)"

据我了解,如果我希望它作为类外的实例,我需要一个参数self。此外,要在内部使用它,我需要跳过提供 self 作为参数。

底线:如果我想要一个既可以在其类内部使用,又可以在外部作为该类的属性调用的方法,我该怎么办?

Basic Maths 有一个方法squared。我很可能在课堂内外都需要它,因为平方整数是你经常做的事情。除了定义两种不同的方法外,还必须有另一种选择 - 一种带有self 用于外部使用,另一种没有它用于内部使用。

谢谢大家。

【问题讨论】:

  • 您的worksOnlyOutside 代码应该是创建类方法的正确代码。要在类中调用方法,请使用 self.worksOnlyOutside(2)

标签: python class methods instance self


【解决方案1】:

如果一个函数是一个实例方法,它的第一个参数应该是对self的引用。

我必须在您的第一个示例中猜测,Python 意识到您打算静态调用该方法,并且不需要第一个参数是 self

  • 如果您希望方法是静态的,则不要有self 参数
  • 如果您打算将该方法作为实例方法,请将第一个参数设为self

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多