Python3:OOP Demo

方便快速回顾Python的OOP语法

 1 ######################
 2 #  类的私有专有方法  #
 3 ######################
 4 # __init__ : 构造函数,在生成对象时调用
 5 # __del__ : 析构函数,释放对象时使用
 6 # __repr__ : 打印,转换
 7 # __setitem__ : 按照索引赋值
 8 # __getitem__: 按照索引获取值
 9 # __len__: 获得长度
10 # __cmp__: 比较运算
11 # __call__: 函数调用
12 # __add__: 加运算
13 # __sub__: 减运算
14 # __mul__: 乘运算
15 # __div__: 除运算
16 # __mod__: 求余运算
17 # __pow__: 乘方
18 
19 class BaseClass:                         
20     """a Base Class"""
21     baseName = "BaseName";
22     def __init__(self,baseName):
23         self.baseName = baseName;
24         pass;
25     def myBaseName(self):
26         return "[BaseClass.myBaseName]" + self.baseName;
27         pass;
28     def myMethod(self):
29         return '[BaseClass.myMethod] 调用父类方法';
30         pass;
31     pass;
32 
33 class ClassName(BaseClass):                # 继承 
34                                            #     多继承:class SubClass(Base1, Base2, Base3):
35     """a simple sample of class"""
36     i = 12345                              # 公有属性:public
37     name = ''
38     money = 0
39     __weight = 0                           # 私有属性:private,两个下划线开头,声明该属性为私有,不能在类外部被使用或直接访问
40     def __init__(self,name,money,msg=None):# 构造方法:private,在类实例化时会自动调用
41         self.data = [0,1];
42         if type(name).__name__ != 'list':
43             BaseClass.__init__(self,name); #【调用基类构造方法】
44             self.name = name;
45         self.msg = msg;
46         self.money = money;
47         self.__weight = 10;
48         self.__whisper();                  #【调用私有方法】
49         pass;
50     def fun(self):                         # 公有方法:public
51         print(self.__class__);             #      类的方法与普通的函数的唯一区别——必须一额外的首参数, 按照惯例它的名称为self
52                                            #      self:约定俗成的命名,非固定命名;代表类的实例,而非类本身
53         print(self);
54         print("[ClassName.fun] 我叫:%s" %(self.name));
55         return "[ClassName.fun] Hello World";
56         pass;
57     def __whisper(self):                   # 私有方法:private,外部调用将报错
58         print("[ClassName.__whisper__] 内部悄悄话,外人看不见~");
59         pass;
60     def myMethod(self):                    # 重写:重写父类方法
61         return '[ClassName.myMethod] 调用子类方法';
62     def __add__(self,other):               # 重写私有专有方法
63         return ClassName(self.name, self.money + other.money, self.msg + other.msg);
64         pass;
65     pass;
66 
67 # use demo
68 
69 obj = ClassName("Johnny",100,"Hi,girl!");    # 实例化对象,且必须满足__init__()方法要求的参数,否则报错
70 print(obj.i);                        
71 print(obj.data);
72 print(obj.name);
73 print(obj.msg);
74 print(obj.fun());
75 
76 obj2 = ClassName("Johnny",200,"Hi,girl!");
77 print(obj.money);
78 print(obj2.money);
79 print((obj +obj2).money);
80 
81 print(obj.myBaseName()); # 【调用父类方法】
82 print(obj.myMethod());   # 【调用子类(重写)方法】
83 print(super(ClassName, obj).myMethod());   # 【调用父类(被重写/覆盖的)方法】

输出:

[ClassName.__whisper__] 内部悄悄话,外人看不见~
12345
[0, 1]
Johnny
Hi,girl!
<class '__main__.ClassName'>
<__main__.ClassName object at 0x000002D2C576EB38>
[ClassName.fun] 我叫:Johnny
[ClassName.fun] Hello World
[ClassName.__whisper__] 内部悄悄话,外人看不见~
100
200
[ClassName.__whisper__] 内部悄悄话,外人看不见~
300
[BaseClass.myBaseName]Johnny
[ClassName.myMethod] 调用子类方法
[BaseClass.myMethod] 调用父类方法

参考文献

  null

原文地址:https://www.cnblogs.com/johnnyzen/p/9746386.html