访问方法中的属性 - 我是将其作为参数传递还是通过self使用直接访问?

时间:2017-12-20 14:56:49

标签: python

我是python的新手,尤其是OOP,我想知道使用属性通过方法计算其他属性的正确方法(如果有的话)。

以下哪个版本会被视为好/坏?为什么?

# Version 1 - direct access to class attributes
class CubicSpline:

    def __init__(self, control_points):
        self.control_points = control_points
        self.polynomials = self.get_polynomials(self.control_points)

    def get_polynomials(self, control_points):

        polynomials = some_function_that_processes(control_points)

        return polynomials

# Version 2 - passing attributes as parameters
class CubicSpline:

    def __init__(self, control_points):
        self.control_points = control_points
        self.polynomials = self.get_polynomials()

    def get_polynomials(self):

        polynomials = some_function_that_processes(self.control_points)

        return polynomials

1 个答案:

答案 0 :(得分:1)

我建议只在必要时进行计算:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:10.1
        ports:
        - containerPort: 5432

我所知道的并没有“黄金法则”。在您认为合适时公开属性,并在属性冗余时公开方法。 “当你认为合适时”会带给你经验。

我建议阅读OOP的SOLID原则。

修改

您应该尽可能通过self访问属性。 some_function_that_processes方法似乎是外部的,因此无法访问“self”。

无需为堆栈上的函数参数分配更多空间,代码更具可读性。