2

我现在正在学习 Python OOP,但对下面代码中的内容感到困惑。

问题:

  1. def __init__(self, radius=1): 参数/属性“radius = 1”到底是什么意思?为什么不直接称为“半径”?

  2. 方法 area() 没有参数/属性“半径”。它从代码中的哪里得到它的“半径”?它怎么知道半径是5?

    class Circle:
        pi = 3.141592
    
        def __init__(self, radius=1):
            self.radius = radius 
    
        def area(self):
            return self.radius * self.radius * Circle.pi
    
        def setRadius(self, radius):
            self.radius = radius
    
        def getRadius(self):
            return self.radius
    
    c = Circle()
    
    c.setRadius(5)
    

还,

  1. 在下面的代码中,为什么name括号中缺少属性/参数?

  2. 为什么不是这样写:def __init__(self, name)def getName(self, name)

    class Methods:
        def __init__(self):
            self.name = 'Methods'
    
        def getName(self):
            return self.name
    
4

3 回答 3

8

def method(self, argument=value):语法定义了一个关键字参数,具有默认值。使用该参数现在是可选的,如果您不指定它,则使用默认值。在您的示例中,这意味着radius设置为1.

在方法中,实例是通过self参数引用的。nameradius值作为属性 (和) 存储,以后 可以通过引用该命名属性 ( , ) 来检索。selfself.name = 'Methods'self.radius = radiusreturn self.namereturn self.radius * self.radius * Circle.pi

我衷心推荐您遵循Python 教程,它将解释所有这些以及更多内容。

于 2012-09-15T09:41:09.020 回答
1
def __init__(self, radius=1):
    self.radius = radius 

这是为类范围初始化变量的默认值设置。这是为了避免任何垃圾输出,以防某些用户c.Area()c = Circle().

In the code below, why is the attribute/argument "name" missing in the brackets? 

在该行self.name = 'Methods'中,您正在创建一个name初始化为字符串 value的变量Methods

为什么不是这样写:def init(self, name) 和 def getName(self, name)?

self.name是为类范围定义的。您可以在类中的任何位置获取和设置其值。

于 2012-09-15T09:44:45.923 回答
0
  1. 该语法radius = 1指定了一个参数“radius”,其默认值为1

    def my_func(param=1): ... print(param) ... my_func() #使用默认值 1 my_func(2) #使用传递的值 2

请注意,在 python 中存在更多种类的参数:位置参数和关键字参数,或两者兼而有之。

通常可以使用位置符号和关键字来分配参数:

>>> def my_func(a,b,c):
...     print (a,b,c)
... 
>>> my_func(1,2,3)
(1, 2, 3)
>>> my_func(1,2,c=3)
(1, 2, 3)
  1. Python 使用“显式”实例传递,因此第一个self参数用于传递调用方法的实例。您可以将其self视为thisJava 的。但是您必须始终使用它来访问实例属性/方法。你不能随便打电话area(),你必须说self.area()

当您这样做时,self.attribute = 1您会创建一个attribute带有值的新属性1并将其分配给实例self。所以在area()方法self.radius中指的是实例的radius属性。self

__init__方法是一种特殊的方法。它类似于构造函数。它在您实例化类时被调用。Python 有很多这样的“特殊方法”,例如__add__(self, other)在使用 operator 时调用该方法+

于 2012-09-15T09:40:55.500 回答