我刚刚开始在python3中学习OOP,今天我们就开始学习这个小班.
class Square:
def __init__(self, side):
self.side = side
def show_perimeter(self):
print(self.side * 4)
test_square = Square(10)
test_square.show_perimeter()
>> 40
Run Code Online (Sandbox Code Playgroud)
现在我在想是否有可能在创建对象时获得周长的值,例如......
class Square:
def __init__(self, side):
self.side = side
self.permiter = get_perimeter(self)
def get_perimeter(self):
return self.side * 4
test_square = Square(10)
print(test_square.perimeter)
Run Code Online (Sandbox Code Playgroud)
这是你能做的吗?
如果是这样,这是一个好习惯吗?
如果没有,那么通过使用侧面获得周边的最佳方法是什么?
除了__init__作为对象构造的一部分自动调用(__new__创建对象并__init__初始化它)之外,该方法没有什么特别之处.因此,您可以在其中做任何您需要做的事情.但是,您需要确保不会无意中执行会对部分初始化对象执行操作的操作.下面的使用@property可以解决大多数这些边缘情况.
这里唯一的区别是它是更好的形式,self.method()而不是method(self)在大多数情况下.
class Square:
def __init__(self, side):
self.side = side
self.permiter = self.get_perimeter()
def get_perimeter(self):
return self.side * 4
test_square = Square(10)
print(test_square.perimeter)
Run Code Online (Sandbox Code Playgroud)
但是,我想指出在这种情况下属性可能会更好:
class Square():
def __init__(self, side):
self.side = side;
@property
def perimeter(self):
return self.side * 4
x = Square(10)
print(x.perimeter)
>>> 40
Run Code Online (Sandbox Code Playgroud)
在这种情况下,@property装饰器将perimeter方法转换为一个属性,该属性可以像它是另一个属性一样被访问,但它是在被要求时计算的.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |