python面向对象的进阶部分

禁止对对象内部属性的访问

首先可以把变量名 variable 命名为 _variable,暗示这个变量不应该随意使用,但这个方法没有任何实际约束。
通常可以使用装饰器对变量进行处理。装饰器是@property。
装饰器会定义两个方法,一个是装饰方法property,一个是设置方法,setter。如下图所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
class test():

self.__init__(self,variable_0):
---
self._variable = variable_0
---

@property
def variable(self):
return self._variable
@variable.setter
def variable(self,variable_1):
self._variable = variable_1

固定类的属性

1
__slot__ = ()

对象的静态方法

有的时候在类里我们要定义一些方法,去做判断是否要实例化一个对象,比如在实例化一个三角形对象前,要判断输入的三条边能否构成三角形,这个时候要用静态方法,它可以在实例化之前调用

1
2
3
4
5
6
7
8
9
class test():

@staticmethod
def valid():
pass

def main:

test.valid()

类方法

类方法可以展示类本身的相关信息

1
@classmethod

类的关系

  • 泛指a和特指b

    就是说b有a的属性,但是强调了b的特殊身份,比如学生和人,学生有人的基本属性,强调了学生的身份。

  • 部分和整体

    比如一个部门,和部门中所有的人(所有的人组成这个部门)

  • 依赖关系

    两个对象之间有互相依赖的关系(对象之间的方法可能要互相利用参数),比如程序员和电脑。

    类的继承和多态

    类的继承,和java类似,可以继承父类的属性和方法,需要在子类的init中进行

    1
    super().__init__()

    类的多态,和Java类似,子类可以重写父类的方法。