下面是一个例子:
from abc import ABC, abstractmethod
import math
# 抽象基类
class Shape(ABC):
@abstractmethod
def getArea():pass #定义获取面积的抽象方法
class Triangle(Shape):
__a = 10 #私有成员变量 __ 可理解成 private
_b = 10.0 #保护成员变量 _ 可理解成 protected
c = 10 #普通成员变量 可理解成 public
# 构造器或称构造方法
def __init__(self, a=0, b=0, c=0):
if not self.__isLegal(a, b, c):
raise Exception("illegal")
self.__a = a
self._b = b
self.c = c
# 析构器或称析构方法
def __del__(self):
class_name = self.__class__.__name__
print(class_name, "销毁")
def getArea(self):
return math.sqrt((self.__a+self._b+self.c)*(self.__a+self._b-self.c)*\
(self.__a+self.c-self._b)*(self._b+self.c-self.__a))/4
# 私有方法, 无法类外访问
def __isLegal(self, a, b, c):
if a+b>c and a+c>b and b+c>a:
return True
else:
return False
# 魔法方法
def __str__(self):
return "triangle"
if __name__ == '__main__':
triangle = Triangle(3,4,5)
print(triangle.__a)
# 报错,不能类外访问
print(triangle._b)
# 可以类外访问
# >>4
print(triangle.c)
# >>5
print(triangle.getArea())
# >> 6.0
print(triangle.__isLegal())
# 报错,不能类外访问
print(str(triangle))
# >>triangle
我们看到__str__是一个魔法方法,可以通过str(object)来访问,python还有很多有趣的魔法方法,详见下面链接
https://blog.csdn.net/qq_40765537/article/details/105198573