[英]Python: confused with classes, attributes and methods in OOP
我现在正在学习Python OOP,并且与下面代码中的某些内容相混淆。
问题:
def __init__(self, radius=1):
参数/属性“radius = 1”究竟是什么意思? 为什么它不被称为“半径”?
方法area()没有参数/属性“radius”。 它在代码中从哪里获得“半径”? 怎么知道半径是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)
也,
在下面的代码中,为什么括号中缺少属性/参数name
?
为什么不是这样写的: def __init__(self, name)
和def getName(self, name)
?
class Methods: def __init__(self): self.name = 'Methods' def getName(self): return self.name
def method(self, argument=value):
语法定义一个带有默认值的关键字参数 。 现在使用该参数是可选的,如果不指定它,则使用默认值。 在您的示例中,这意味着radius
设置为1
。
在方法中,使用self
参数引用实例。 name
和radius
值作为属性存储在 self
( self.name = 'Methods'
和self.radius = radius
),稍后可以通过引用该命名属性来检索( return self.name
, return self.radius * self.radius * Circle.pi
)。
我衷心建议您按照Python教程 ,它将解释所有这些以及更多。
def __init__(self, radius=1):
self.radius = radius
这是默认值设置,用于初始化类范围的变量。这是为了避免任何垃圾输出,以防某些用户在c = Circle()
之后调用c.Area()
c = Circle()
。
In the code below, why is the attribute/argument "name" missing in the brackets?
在self.name = 'Methods'
您将创建一个初始化为字符串值Methods
的变量name
。
为什么不是这样写的:def init(self,name)和def getName(self,name)?
self.name
是为类范围定义的。 您可以在类中的任何位置获取并设置其值。
语法radius = 1
指定参数“radius”,其默认值为1
:
def my_func(param = 1):... print(param)... my_func()#uses默认值1 my_func(2)#uses传递的值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)
self
参数用于传递调用方法的实例。 您可以将self
视为Java的this
。 但是您必须始终使用它来访问实例属性/方法。 你不能只调用area()
,你必须说self.area()
。 当您执行self.attribute = 1
您将创建一个值为1
的新属性attribute
,并将其分配给实例self
。 因此在area()
方法中, self.radius
引用self
实例的radius
属性。
__init__
方法是一种特殊方法。 它类似于构造函数。 在实例化类时调用它。 Python有很多这些“特殊方法”,例如在使用operator +
时调用方法__add__(self, other)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.